Esquemas de Recursión en Agda

No hace falta decir, la construcción estándar en Haskell

newtype Fix f = Fix { getFix :: f (Fix f) }

cata :: (Functor f) => (f a -> a) -> Fix f -> a
cata f = f . fmap (cata f) . getFix 

Es impresionante y extremadamente útil.

Intentando definir algo similar en Agda (lo pondré solo para completar)

data Fix (f : Set -> Set) : Set where
    mkFix : f (Fix f) -> Fix f

falla porquef No es necesariamente estrictamente positivo. Esto tiene sentido, podría fácilmente obtener una contradicción de esta construcción al elegir adecuadamente.

Mi pregunta es: ¿hay alguna esperanza de codificar esquemas de recursión en Agda? Se ha hecho? ¿Qué se requeriría?

Respuestas a la pregunta(1)

Su respuesta a la pregunta