haskell - 为我的数据类型实现 Functor 时出错

标签 haskell functional-programming

当我为 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/

相关文章:

haskell - 真实世界 Haskell,第 5 章,SimpleJSON 编译错误

haskell - 具有下游状态且无损失的惯用双向管道

json - 使用 Play 的 (2.2) Scala JSON 组合器编写案例类中未找到的任意值

c++ - "Deep"使用模板元编程在 C++ 中进行函数柯里化(Currying)

list - 如何在 Erlang 中使用闭包?

algorithm - 查询球体表面近点的快速算法/数据结构是什么?

haskell - 保存我正在运行的顶层以供以后使用

functional-programming - 多项式方程标准毫升

haskell - 如何在 Haskell 中编写游戏循环?

haskell - 如何在 Haskell 中休眠或延迟线程?