typ i = int typ c = char typ b = bool var g1 : i var g2 : i fun ext(a : i, bb : i) : i fun helper(x : i) : b = x == 0 fun fib(n : i) : i = if n == 0 then 0 else if n == 1 then 1 else fib(n - 1) + fib(n - 2) end end fun main() : i = let var local1 : i var local2 : i typ li = i fun inner(a : li, bb : li) : li = let var tmp : li in tmp = a + bb, tmp * 2 end in g1 = 10, g2 = 20, local1 = fib(g1), local2 = inner(g1, g2), let var shadow : b var g1 : b in shadow = helper(local1), g1 = shadow and true or false, let var deep : i in deep = ext(local1, local2), if helper(deep) then g2 = deep + 1 else g2 = deep - 1 end, while g2 > 0 do if g2 % 2 == 0 then g2 = g2 - 1 else g2 = g2 * 2 - 3 end end, deep end end end