【发布时间】:2014-01-20 15:12:19
【问题描述】:
阅读Milewski's F-algebra article 后,我尝试实现它并用于解决实际问题。但是,我似乎无法弄清楚如何为Fix 编写实例,
newtype Fix f = Fx { unFix :: f (Fix f) }
cata :: Functor f => (f a -> a) -> Fix f -> a
cata alg = alg . fmap (cata alg) . unFix
例如,假设我这个简单的代数:
data NatF a = Zero | Succ a deriving Eq
type Nat = Fix NatF
现在我尝试实现Eq 的实例(注意:deriving 不起作用):
instance ??? => Eq (Fix f) where
(==) = ???
这就是我卡住的地方。我如何填写??? 来完成这项工作?这甚至可以做到吗?
【问题讨论】:
-
您可能想要专门为 Fix NatF 创建 Eq 实例。
标签: haskell typeclass algebra recursive-datastructures fixpoint-combinators