【发布时间】:2018-01-16 18:19:44
【问题描述】:
在 Ed Kmett 的 recursion-scheme 包中,有三个声明:
newtype Fix f = Fix (f (Fix f))
newtype Mu f = Mu (forall a. (f a -> a) -> a)
data Nu f where
Nu :: (a -> f a) -> a -> Nu f
这三种数据类型有什么区别?
【问题讨论】:
-
我不太了解理论,但我认为对于更可靠的语言,
Mu是最小不动点,Nu是最大不动点。在 Haskell 中,这三个都应该是等价的(我相信)。请注意,对于Mu和ana对于Nu实现cata非常容易。
标签: haskell recursive-datastructures recursion-schemes fixpoint-combinators