我正在使用 GHCi(版本6.12.3)尝试使用 Haskell。最近我读到了有关函子和应用函子的内容,想知道是否可以只使用函子的基本原理来实现类似于应用函子的
我遇到了以下错误。
<*>
功能。经过一番思考,我得出了 fmap fmap
的结论,它将具有(几乎)理想的类型:
Functor f => f (a -> b) -> f (f a -> f b)
或更通用地说:
(Functor f1, Functor f2) => f1 (a -> b) -> f1 (f2 a -> f2 b)
我尝试了一下:
let q = fmap fmap
我遇到了以下错误。
<interactive>:1:8:
Ambiguous type variable `f1' in the constraint:
`Functor f1' arising from a use of `fmap' at <interactive>:1:8-16
Probable fix: add a type signature that fixes these type variable(s)
<interactive>:1:13:
Ambiguous type variable `f' in the constraint:
`Functor f' arising from a use of `fmap' at <interactive>:1:13-16
Probable fix: add a type signature that fixes these type variable(s)
按照建议编写上述类型签名并没有帮助。
最疯狂的事情是当我输入 :t fmap fmap
时,我得到了与上面相同的类型。
我做错了什么?为什么 fmap fmap
会产生类型错误,尽管 GHCi找到了它的类型?