Skip to content

Instantly share code, notes, and snippets.

View siddhartha-gadgil's full-sized avatar

Siddhartha Gadgil siddhartha-gadgil

View GitHub Profile
forever : ℕ → ℕ
forever zero = zero
forever (succ n) = forever (succ (succ n))
_*_ : ℕ → ℕ → ℕ
zero * n = zero
(succ m) * n = n + (m * n)
factorial : ℕ → ℕ
factorial zero = succ zero
factorial (succ n) = (succ n) * (factorial n)
data List (A : Set) : Set where
[] : List A
_::_ : A → List A → List A
{-# BUILTIN NATURAL ℕ #-}
{-# BUILTIN ZERO zero #-}
{-# BUILTIN SUC succ #-}
open import Nat
onetwothree : List ℕ
onetwothree = 1 :: (2 :: (3 :: []))
length₀ : (A : Set) → List A → ℕ
length₀ _ [] = zero
length₀ A (a :: l) = succ (length₀ A l)
length : {A : Set} → List A → ℕ
length [] = zero
length (a :: l) = succ (length l)
_++_ : {A : Set} → List A → List A → List A
[] ++ l = l
(a :: xs) ++ l = a :: (xs ++ l)
reverse : {A : Set} → List A → List A
reverse [] = []
reverse (a :: l) = (reverse l) ++ (a :: [])
_map_ : {A B : Set} → List A → (A → B) → List B
[] map _ = []
(a :: xs) map f = (f a) :: (xs map f)
twothreefour : List ℕ
twothreefour = onetwothree map succ
_flatMap_ : {A B : Set} → List A → (A → List B) → List B
[] flatMap _ = []
(a :: xs) flatMap f = (f a) ++ (xs flatMap f)