fmap如何为List工作

时间:2013-04-02 21:09:35

标签: haskell functor

Learn you a haskell给出了Functor类型类的描述。

我可以看到,对于列表,它实现如下:

instance Functor [] where  
fmap = map  

但这是如何运作的?

在类型类Functor中,fmap甚至没有实现。所有它只是这样的类型声明:

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

只是通过类型声明,Haskell如何正确地找出列表的映射操作?

1 个答案:

答案 0 :(得分:16)

map只是类型为(a -> b) -> [a] -> [b]的普通函数。与fmap不同,{em>不是Functor类型类的一部分。它完全符合您的想法。

类型类背后的想法是你使用类型来确定要使用的实现。当我们说instance Functor [] where ...时,我们告诉编译器fmap(列表类型)[]的实现是什么。

在这种情况下,fmap的实现只是map,这是一个正常的功能。