5

向你学习一个 haskell给出了关于 Functor 类型类的描述。

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

instance Functor [] where  
fmap = map  

但这是如何工作的?

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

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

仅仅通过类型声明,Haskell 如何正确计算 List 的映射操作?

4

1 回答 1

18

map只是 type 的普通函数(a -> b) -> [a] -> [b]。与 不同fmap的是,它不是类型类的一部分Functor。它完全按照您的想法工作。

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

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

于 2013-04-02T21:12:15.273 回答