fmap 函数组合如何工作



我试图理解函数组合是如何工作的。

常见示例是:

(.) :: (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值是多少?

(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)

最新更新