10

Milewski の F 代数の記事を読んだ後、それを実装して実際の問題に使用しようとしました。ただし、 のインスタンスの書き方がわかりません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
  (==) = ???

そして、これは私が立ち往生するところです。これを機能させるには、どのように入力すればよい???ですか? これは可能ですか?

4

1 に答える 1