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 = (.)
.
我知道 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 = (.)
.