【发布时间】:2013-02-22 17:23:02
【问题描述】:
我相信我理解 fmap . fmap 的 Functors,但在函数方面,这几个月来一直让我头疼。
我看到您可以将(.) 的定义应用于(.) . (.),但我忘记了如何做到这一点。
当我自己尝试时,结果总是错误:
(.) f g = \x -> f (g x)
(.) (.) (.) = \x -> (.) ((.) x)
\x f -> (.) ((.) x) f
\x f y -> (((.)(f y)) x)
\x f y g-> (((.)(f y) g) x)
\x f y g-> ((f (g y)) x)
\x f y g-> ((f (g y)) x):: t2 -> (t1 -> t2 -> t) -> t3 -> (t3 -> t1) -> t
如果“仅应用定义”是唯一的方法,那么有人怎么想出(.) . (.)?
我必须缺少一些更深层次的理解或直觉。
【问题讨论】:
-
@Will Ness 你是对的.. :P
-
@WillNess:戴眼镜的猫头鹰组合器
-
@amindfv 就是这样..!!
-
如果你理解
fmap . fmap,那么,只需将fmaps 都专门化为(->) e函子,你就完成了。 ;-) -
@DanielWagner 是的,但我也缺少其他东西,我不确定是什么,但各种答案都有帮助。可悲的是我只能勾选一个答案:/
标签: haskell functional-programming pointfree