2017-02-24 47 views
2

当我定义下面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) 

但是,当我定义以下functor因为它:

instance Functor Body where 
    fmap func (Body pos vel mass clr) = Body (func pos vel mass clr) 

我得到以下错误:

Expected kind '* -> *', but Body has kind *

请确定是什么问题?

+0

备注 - 我会推荐使用你的'Body'数据类型的记录语法 – epsilonhalbe

回答

6

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

Body是一种类型。 Body Int, Body Char, Body String, ...是无稽之谈。

为了成为仿函数,您的data必须定义参数类型,如Maybe

我想你实际上想要一个常规函数而不是一个函子实例。然而,我不确定你真正想要完成什么。