------------------------------------------------------------------------ -- Andreas Abel and Brigitte Pientka, -- Wellfounded Recursion with Copatterns and Sized Types. -- -- Journal of Functional Programming, volume 26, 2016 -- -- Agda code for examples ------------------------------------------------------------------------ {-# OPTIONS --postfix-projections #-} module FixedPointCombinators where open import Prelude open import Generic ------------------------------------------------------------------------ -- Section 2.7: Programming fixed-point combinators ------------------------------------------------------------------------ fixMu : ∀{i F} (A : Size → Set) → (∀{j} → ((k : Size< j) → Mu k F → A k) → Mu j F → A j) → Mu i F → A i fixMu A f (inn t) = f (λ{ k → fixMu A f }) (inn t) fixNu : ∀{i F} (A : Size → Set) → (∀{j} → ((k : Size< j) → A k → Nu k F) → A j → Nu j F) → A i → Nu i F fixNu A f a .out = f (λ{ k → fixNu A f }) a .out