有人能给我解释一下 Functor 的签名吗?
Prelude> :info Functor
class Functor (f :: * -> *) where
fmap :: (a -> b) -> f a -> f b
(<$) :: a -> f b -> f a
我不明白什么*
means.
*
是 Haskell 使用的语法kinds https://wiki.haskell.org/Kind
在这种情况下,这意味着f
是更高级的(在类型级别上思考函数)
Here f
正在采用一种类型(第一个*
)并正在生产另一种类型(第二个*
)
你基本上可以在这里忘记所有这些,只需将其读作:
class Functor f where
fmap :: (a -> b) -> f a -> f b
(<$) :: a -> f b -> f a
但在我看来,这是一个很好的文档,并且有很多更复杂的类亲切的签名真的很有帮助 - 例如:
class MonadTrans (t :: (* -> *) -> * -> *) where
lift :: Monad m => m a -> t m a
-- Defined in `Control.Monad.Trans.Class'
Here t
将类型构造函数本身(Monad)与另一个类型结合起来并再次生成一个类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)