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