3

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
4

0 に答える 0