------------------------------------------------------------------------ -- 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 Fibonacci where open import Prelude ------------------------------------------------------------------------ -- Section 2.1 Example: Fibonacci ------------------------------------------------------------------------ record Stream (i : Size) (A : Set) : Set where coinductive field head : ∀{j : Size< i} → A tail : ∀{j : Size< i} → Stream j A open Stream zipWith : ∀{i A B C} → (A → B → C) → Stream i A → Stream i B → Stream i C zipWith f s t .head = f (s .head) (t .head) zipWith f s t .tail = zipWith f (s .tail) (t .tail) fib : ∀{i} → Stream i ℕ fib .head = 0 fib .tail .head = 1 fib .tail .tail = zipWith _+_ fib (fib .tail)