Haskell 中的基本函子

Basic Functors in Haskell

我知道 Functor 类型类是这样定义的:

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

在我的课程中它说这是一个列表如何成为仿函数实例的方式:

instance Functor [] where  
    fmap = map  

[] a[a] 的某种同义词吗?

Is [] a some kind of synonym for [a]

是的,正是。这两种类型之间没有区别:后者只是前者的漂亮符号。

在 Haskell 中,所有类型都遵循语法 T arg1 arg2 ...,其中 T 是某种类型构造函数,但其​​中一些也有漂亮的硬编码符号,以方便人类使用.这里有一些:

a -> b   means (->) a b
[a]      means [] a
(a,b)    means (,) a b
(a,b,c)  means (,,) a b c
... ditto for other tuple types

因此,可以找到一个仿函数实例,例如 instance Functor ((->) a),其 fmap 的类型为

(x -> y) -> ((->) a x) -> ((->) a y)

也可以这样写

(x -> y) -> (a -> x) -> (a -> y)

这样的fmap只是函数组合,即fmap = (.).