学习 Haskell 过程中,写了一篇对 Functor 的总结

2016-02-11 12:04:46 +08:00
 scarlex
http://scarletsky.github.io/2016/02/09/what-is-functor-in-haskell/

欢迎各位指教。
5772 次点击
所在节点    Haskell
9 条回复
eccstartup
2016-02-11 12:11:45 +08:00
可以增加一些复杂数据类型的例子。
scarlex
2016-02-11 12:58:46 +08:00
我是刚学习 Functor ,还没接触太多复杂的数据类型
aaaron7
2016-02-13 01:36:32 +08:00
严格意义上来说, List 应该是 Functor 的一个 instance 吧。
scarlex
2016-02-14 11:42:20 +08:00
@aaaron7 是的,不过对初学者来说,认为 List 是一个 Functor 就好了吧~
bramblex
2016-03-01 13:05:23 +08:00
functor 是函子

fmap 实际上就是一个 类型 T(a) -> T(b) 的一个映射。

======================

为什么 fmap id = id ?首先 id 的类型是 a -> a ,你给 fmap 了以后, fmap id 是不是变成了 T(a) -> T(a) 了?现在令 T(a) 为 a ,是不是 fmap id 又变回 a -> a 了?

为什么 fmap (f . g) = fmap f . fmap g 呢?
假设 f : a -> b, g: b -> c ,那么 f . g : a -> c
f . g : a -> c
famp (f . g) : T(a) -> T(c)

fmap f : T(a) -> T(b)
fmap g : T(b) -> T(c)
fmap f . fmap g : T(a) -> T(c)

所以 fmap (f .g) = fmap f . fmap g
scarlex
2016-03-01 14:01:59 +08:00
@bramblex 受教了~
scarlex
2016-03-01 14:44:03 +08:00
@bramblex 已添加证明过程~
bramblex
2016-03-01 14:50:00 +08:00
@scarlex

不不不,这不是严谨证明

这只是从类型的角度来帮助理解 functor 是个啥而已。
scarlex
2016-03-01 16:09:41 +08:00
@bramblex 但这种证明方式对初学者很友好,很容易理解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/256071

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX