什么是错误的实例Functor Int在哪里
instance Functor Int where fmap f a = f a
期待的......
我不能使monad int,applicative int,functor int
什么是如此有趣Maybe a
,[a]
,Either e a
,IO a
?该类型需要一个额外的参数.也就是说,Maybe
它本身不是一种类型.你必须使用另一种类型,例如Int
实际获得一种类型:Maybe Int
.
我们来看看它Functor
的定义:
class Functor f where fmap :: (a -> b) -> f a -> f b -- ^^^ ^^^
无论你使用什么,都f
必须能够使用一种类型.而且Int Int
还是Int ()
不是一个类型,因为Int
已经处于一种*
.你不能通过申请Int
其他东西来构建另一种类型.
Maybe
另一方面是善良的* -> *
.它需要一个类型(例如Double
)并返回一个类型,Maybe Double
:
-- using pseudo kind-signatures Maybe :: * -> * Double :: * Maybe Double :: *
所有这一切,因为我们f
采取a
了签名fmap
.
所以不行.你不能使任何常规类型(实物*
)成为Functor
.