当我为 Maybe 定义以下 Functor
时,它工作正常
instance Functor Maybe where
fmap func Nothing = Nothing
fmap func (Just val) = Just (func val)
我将我的数据类型定义为:
type Vec2 = (Double, Double)
data Body = Body Vec2 Vec2 Double (Color3 Double) deriving(Eq,Ord, Show, Foldable)
但是当我为其定义以下仿函数
时:
instance Functor Body where
fmap func (Body pos vel mass clr) = Body (func pos vel mass clr)
我收到以下错误:
Expected kind '* -> *', but Body has kind *
请确定问题是什么?
最佳答案
也许
不是一种类型。 也许 Int、也许 Char、也许 String,...
是类型。
Body
是一种类型。 Body Int、Body Char、Body String,...
都是废话。
为了成为仿函数,您的数据
必须定义一个参数类型,例如Maybe
。
我猜你实际上想要一个常规函数而不是仿函数实例。但是,我不确定您真正想要实现的目标。
关于haskell - 为我的数据类型实现 Functor 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42434611/