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

sma*_*qar 2 haskell functional-programming

当我Functor为Maybe 定义以下内容时,它可以正常工作

    instance Functor Maybe where
        fmap func Nothing = Nothing
        fmap func (Just val) = Just (func val)
Run Code Online (Sandbox Code Playgroud)

我已将我的数据类型定义为:

    type Vec2 = (Double, Double)
    data Body = Body Vec2 Vec2 Double (Color3 Double) deriving(Eq,Ord, Show, Foldable)
Run Code Online (Sandbox Code Playgroud)

但是当我functor为它定义以下内容时:

    instance Functor Body where
    fmap func (Body pos vel mass clr) = Body (func pos vel mass clr)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

期待的'* - >*',但身体有点*

请确定问题是什么?

chi*_*chi 6

Maybe不是一种类型.Maybe Int, Maybe Char, Maybe String, ...是类型.

Body是一种类型.Body Int, Body Char, Body String, ...是胡说八道.

要成为仿函数,您data必须定义参数类型Maybe.

我猜你实际上想要一个常规函数而不是一个函子实例.但是,我不确定你真正想要实现的目标.