函数和类型类

Von*_*fry 0 haskell functor

我是Haskell的新手.我明白什么是算子和类别.

但我有另一个问题.我必须使用Functor类型类的仿函数吗?

我想我也可以定义另一个类型来做同样的事情Functor

他们俩都可以这样做.

instance Functor MyData where
    fmap f (MyData a) = MyData (f a)
Run Code Online (Sandbox Code Playgroud)

class MyDataFunctor f where
   fmap :: (a -> b) -> f a -> f b

instance MyDataFunctor MyData where
   fmap f (MyData a) = MyData (f a)
Run Code Online (Sandbox Code Playgroud)

lef*_*out 8

当然你可以做到这一点.它只是有点重新发明轮子.标准类的好处是,如果合适的话大家都会使他们自己的类型的实例,因此,如果您编写能在一个通用的操作功能,Functor f那么它就会有一张巨大的不同类型构造的数量f从几百库.如果您将函数更改为require MyDataFunctor f,它将执行完全相同的操作,但只能使用您自己的类型MyData.

您可能想要编写自己的类的唯一明智的理由是,如果您想要不同的行为.