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
(==) = ???
そして、これは私が立ち往生するところです。これを機能させるには、どのように入力すればよい???
ですか? これは可能ですか?