我试图了解功能组合的工作原理。
常见的例子是:
(.) :: (b -> c) -> (a -> b) -> a -> c
f . g = \x -> f (g x)
很容易理解,功能组成是什么。
现在考虑:
(fmap . fmap) (+5) (Just (Just 4))
让我们考虑第一个fmap
实施:
fmap . fmap = \x -> fmap ( fmap x )
该示例将如何执行?
fmap (+5)
是否会首先执行?
与示例相关的x
值是什么?
答案 0 :(得分:2)
(fmap . fmap) (+5) (Just (Just 4))
= { def. (.) }
fmap (fmap (+5)) (Just (Just 4))
= { fmap g (Just x) = Just (g x), where g = fmap (+5) ; x = Just 4 }
Just (fmap (+5) (Just 4))
= { fmap g (Just x) = Just (g x), where g = (+5) ; x = 4 }
Just (Just ((+5) 4))
= { def. (+) }
Just (Just 9)