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