函子和类型 类
Functor and type classes
我是 Haskell 的新人。我明白了什么是仿函数和范畴。
但我还有一个问题。我必须使用 Functor
类型 class 的函子吗?
我想我也可以定义另一种类型 class 来做与 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)
当然可以。它只是有点重新发明轮子。标准 classes 的优点是每个人都会在适当的时候创建它们的类型实例,所以如果你编写一个可以在泛型 Functor f
上运行的函数,那么它将与 来自数百个库的大量 不同类型构造函数f
。如果您将函数更改为 require MyDataFunctor f
,它会做完全相同的事情,但是 仅 与您自己的类型 MyData
.
您想要编写自己的 class 的唯一合理原因是您想要不同的 行为。
我是 Haskell 的新人。我明白了什么是仿函数和范畴。
但我还有一个问题。我必须使用 Functor
类型 class 的函子吗?
我想我也可以定义另一种类型 class 来做与 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)
当然可以。它只是有点重新发明轮子。标准 classes 的优点是每个人都会在适当的时候创建它们的类型实例,所以如果你编写一个可以在泛型 Functor f
上运行的函数,那么它将与 来自数百个库的大量 不同类型构造函数f
。如果您将函数更改为 require MyDataFunctor f
,它会做完全相同的事情,但是 仅 与您自己的类型 MyData
.
您想要编写自己的 class 的唯一合理原因是您想要不同的 行为。