Esquemas de Recursão em Agda

Escusado será dizer que a construção padrão em 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 

é incrível e extremamente útil.

Tentando definir uma coisa semelhante em Agda (vou colocá-lo apenas por causa da integralidade)

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

falha porquef não é necessariamente estritamente positivo. Isso faz sentido - eu poderia facilmente obter uma contradição a partir desta construção escolhendo apropriadamente.

Minha pergunta é: existe alguma esperança de codificar esquemas de recursão em Agda? Já foi feito? O que seria necessário?

questionAnswers(1)

yourAnswerToTheQuestion