// List type (Head (Cons x xs)) = (Some x) (Head Nil) = None // Something like Rust's Option.unwrap_or (UnwrapOr (Some x) y) = x (UnwrapOr None y) = y (SumFirstTwo Nil) = 0 (SumFirstTwo (Cons x xs)) = (+ x (UnwrapOr (Head xs) 0)) // Iterate a function n times on an input (Iter f x 0) = x (Iter f x n) = (f (Iter f x (- n 1))) (Fib n) = (Head (Iter λxs (Cons (SumFirstTwo xs) xs) (Cons 0 (Cons 1 Nil)) n)) (Main n) = (Fib 2000000)