indent n = concat $ replicate n " " gen level n max | level == max = indent level ++ "a := '" ++ (show $ product [1..n]) ++ "'\n" | otherwise = indent level ++ "if n <= " ++ show (n+2^(max-level-1)) ++ " then\n" ++ gen (level+1) n max ++ indent level ++ "else\n" ++ gen (level+1) (n+2^(max-level-1)) max main = putStrLn $ gen 0 0 6