gpt4 book ai didi

haskell - 在 F 代数中为 Fix/Mu 编写通用实例

转载 作者:行者123 更新时间:2023-12-02 02:15:52 26 4
gpt4 key购买 nike

阅读后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
(==) = ???

这就是我陷入困境的地方。我该如何填写 ??? 才能使其正常工作?这可能吗?

最佳答案

我能找到的最简单的例子就是

{-# LANGUAGE UndecidableInstances, FlexibleContexts #-}
import Data.Function (on)

instance Eq (f (Fix f)) => Eq (Fix f) where
(==) = (==) `on` unFix

我们所需要的只是 Fix fEq 的一个实例正是在f (Fix f)时是 Eq 的一个实例。因为一般来说我们有类似 Eq a => Eq (f a) 的实例这工作得很好。

 > Fx Zero == Fx Zero
True

关于haskell - 在 F 代数中为 Fix/Mu 编写通用实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20895359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com