On Thursday, 10. June 2010 22:10:08 Maciej Piechotka wrote: Wow!
this is somewhat above my level. I guess I need to go back to the books. I'll document my ignorance nontheless. > data Named a = Named String a > > instance Functor Named where > f `fmap` (Named s v) = Named s (f v) > okay so far > instance Applicative Named where > pure x = Named "" x > (Named s f) <*> (Named t v) = Named (s ++ "(" ++ t ++ ")") (f v) Applicative. Need to study that Control.Applicative (<*>) :: Applicative f => f (a -> b) -> f a -> f b So in our case the Applicative is a "Named". When I apply a Named to a function, then I get a function between the corresponding Named types. When I pass it an Int->Char function, I get a Named Int -> Named Char function. But here it is applied to another Named ... is that the (a->b)? Puzzeled. > instance Eq a => Eq (Named a) where > (Named _ x) == (Named _ y) = x == y > > instance Show (Named a) where > show (Named s _) = s > Understood. > namedPure :: Show a => a -> Named a > namedPure x = Named (show x) x When I can show something I can always name it so its name is what 'show' would return. Okay I guess I got it. This turns a "showable" into a Named. > > test :: Num a > => (a -> a) -> (a -> a) -> (a -> a) -> [String] > test f g h = do > [f', g', h'] <- permutations [Named "f" f, Named "g" g, Named "h" h] According to Hoogle permutations should be in Data.List. Mine (GHCI 6.8.2) does not seem to have it. Seems to have something to do with "base", whatever that is. > guard $ namedPure 42 == f' <*> g' <*> h' <*> namedPure 42 Ah, the 42 needs namedPure. Again this <*> operator... I believe the whole thing is using a List Monad. > return $ show f' ++ " . " ++ show g' ++ " . " ++ show h' I wonder if the thing returns just one string or a list of strings. I guess "return" cannot return anything more unwrapped than a List, so it must be a List. But does it contain just the first match or all of them? All of them! And how many brackets are around them? -- Martin _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe