Излишне говорить, что стандартная конструкция в 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
это здорово и очень полезно.
Пытаюсь определить аналогичную вещь в Агде (напишу просто для полноты картины)
data Fix (f : Set -> Set) : Set where
mkFix : f (Fix f) -> Fix f
терпит неудачу, потому что f
не обязательно является строго положительным. Это имеет смысл — я мог бы легко получить противоречие из этой конструкции, выбрав соответствующий вариант.
Мой вопрос: есть ли надежда на кодирование схем рекурсии в Агде? Это было сделано? Что потребуется?