higher order fix point in OCaml

176 Views Asked by At

What are all the possible implementations the following second-order example in OCaml ? Here is some very simple Haskell code exhibiting a fold, aka the universal property of the initial algebra FixH.

I imagine it's easy to make it with OCaml functors. What are the other options ?

Is there any known implementation with "lightweight higher order kind" style ?

{-# 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
0

There are 0 best solutions below