函数和类型类

时间:2017-03-12 12:57:21

标签: haskell functor

我是Haskell的新手。我理解什么是仿函数和类别。

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

我想我还可以定义另一个类型类与Functor一样吗?

他们两个都可以这样做。

instance Functor MyData where
    fmap f (MyData a) = MyData (f a)

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

instance MyDataFunctor MyData where
   fmap f (MyData a) = MyData (f a)

1 个答案:

答案 0 :(得分:8)

当然可以这样做。它只是有点重新发明轮子。标准类的优点是每个人都会在适当的时候创建它们的类型实例,所以如果你编写一个可以在通用Functor f上运行的函数,那么它将使用 huge 来自数百个库的不同类型构造函数f的数量。如果您将功能更改为需要MyDataFunctor f,那么它将执行完全相同的操作,但具有您自己的类型MyData

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