
-- tripplemagic : Int -> Int -> Int -> Int;
-- tripplemagic x y z = ((\x:Int. x+x) x) + y + z;
-- main : Int;
-- main = tripplemagic ((\x:Int. x+x+3) ((\x:Int. x) 2)) 5 3
-- answer: 22

-- apply : (Int -> Int) -> Int -> Int;
-- apply f x = f x;
-- main : Int;
-- main = apply (\x : Int . x + 5) 5
-- answer: 10

-- apply : (Int -> Int -> Int) -> Int -> Int -> Int;
-- apply f x y = f x y;
-- krimp: Int -> Int -> Int;
-- krimp x y = x + y;
-- main : Int;
-- main = apply (krimp) 2 3;
-- answer: 5

fibbonaci : Int -> Int;
fibbonaci x = case x of {
    0 => 0,
    1 => 1,
    -- abusing overflows to represent negatives like a boss
    _ =>   (fibbonaci (x + 9223372036854775807 + 9223372036854775807))
         + (fibbonaci (x + 9223372036854775807 + 9223372036854775807 + 1))
} : Int;

faccer : Int -> Int;

main : Int;
main = fibbonaci 10;
-- answer: 55
