【发布时间】:2018-02-25 07:25:32
【问题描述】:
我正在尝试理解一些 haskell 代码。
这是有道理的。
Prelude> fmap (+1) (Just 1)
Just 2
这也是有道理的。
Prelude> (fmap.fmap) (+1) (Just [1])
Just [2]
但我不明白这是如何工作的。
Prelude> (fmap.fmap) (+1) Just 1
Just 2
我已经尝试解决这些部件。在我看来,这就是正在发生的事情。
(fmap (fmap (+1)) Just) 1
我尝试输入子表达式。
这是有道理的。
Prelude> :t fmap (+1)
fmap (+1) :: (Functor f, Num b) => f b -> f b
这还是有道理的。
Prelude> :t fmap (fmap (+1))
fmap (fmap (+1)) :: (Functor f, Functor f1, Num b) =>
f (f1 b) -> f (f1 b)
但我不明白这一点。
Prelude> :t fmap (fmap (+1)) Just
fmap (fmap (+1)) Just :: Num b => b -> Maybe b
一个函数的类型如何
(Functor f, Functor f1, Num b) => f (f1 b) -> f (f1 b)
在应用 Just 后,其类型为:
a -> Maybe a
导致这种类型?
Num b => b -> Maybe b
confused about function as instance of Functor in haskell的问题可能和这个有关,但我还是很困惑。
【问题讨论】: