错误的实例Functor Int在哪里
instance Functor Int where
fmap f a = f a
期待的那种......
我不能使monad int,applicative int,functor int
答案 0 :(得分:9)
no-bitwise
,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
)设为*
的实例。
答案 1 :(得分:0)
class Functor f where
fmap :: (a -> b) -> f a -> f b
仿函数f
将类型映射到类型 - 它将a
映射到f a
,将b
映射到f b
。这意味着f不能是具体类型,如Int;它必须是一种将另一种类型作为参数的类型。您可以将f
视为类型函数。