List的fmap是如何工作的?

5
Learn you a haskell介绍了Functor类型类。对于列表,它的实现如下:
instance Functor [] where  
fmap = map  

但是这是如何运作的呢?
在类型类Functor中,fmap甚至没有实现。它只有像这样的类型声明:
class Functor f where  
fmap :: (a -> b) -> f a -> f b  

仅仅通过类型声明,Haskell如何正确地为列表(Lists)推导出map操作的实现?

1
你可能想阅读我写的有关Functors教程,作为对这个问题的回答。 - AndrewC
1个回答

18

map 是一种普通函数,其类型为 (a -> b) -> [a] -> [b]。与 fmap 不同的是,它并不是 Functor 类型类的一部分。它的工作方式与您想象的完全相同。

类型类背后的思想是使用类型来确定使用哪个实现。当我们说 instance Functor [] where ... 时,我们告诉编译器 [](列表类型)的 fmap 实现方式。

在这种情况下,fmap 的实现只是一个普通函数 map


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接