OCaml の次の二次的な例で可能なすべての実装は何ですか? これは非常に単純な Haskell コードfold
で、初期代数の普遍的な性質とも呼ばれますFixH
。
OCamlのファンクターで作るのは簡単だと思います。他のオプションは何ですか?
「軽量高次種類」スタイルの既知の実装はありますか?
{-# LANGUAGE RankNTypes #-}
newtype FixH t a = FixH {unFixH :: t (FixH t) a}
type Tnat f g = forall a. f a -> g a
class FunctorH t where
hmap :: Tnat f g -> Tnat (t f) (t g)
foldFixH :: forall t f. FunctorH t => Tnat (t f) f -> Tnat (FixH t) f
foldFixH alg = alg . hmap (foldFixH alg) . unFixH