(module max3
  (fn max
    (type (fn-type (params (own (con Int)) (own (con Int))) (ret (own (con Int)))))
    (params a b)
    (body (if (app gt a b) a b)))
  (fn max3
    (doc "Demonstriert verschachteltes if (statt max-call) zum Test des Block-Trackings.")
    (type (fn-type (params (own (con Int)) (own (con Int)) (own (con Int))) (ret (own (con Int)))))
    (params a b c)
    (body (if (app gt a b) (if (app gt a c) a c) (if (app gt b c) b c))))
  (fn main
    (type (fn-type (params) (ret (own (con Unit))) (effects IO)))
    (params)
    (body (app print (app max3 3 17 9)))))
