Rekursionsschemata in Agda

Selbstverständlich die Standardkonstruktion in 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 

ist fantastisch und äußerst nützlich.

Versuch, eine ähnliche Sache in Agda zu definieren (ich werde es der Vollständigkeit halber sagen)

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

scheitert daranf ist nicht unbedingt streng positiv. Das macht Sinn - ich könnte leicht einen Widerspruch aus dieser Konstruktion ziehen, wenn ich sie richtig auswähle.

Meine Frage ist: Gibt es irgendeine Hoffnung, Rekursionsschemata in Agda zu kodieren? Wurde es getan? Was wäre erforderlich?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage