toWord :: Int -> [Char] toWord = toWord' . show toWord' :: [Char] -> [Char] toWord' ('0':[]) = "" toWord' ('1':[]) = "one" toWord' ('2':[]) = "two" toWord' ('3':[]) = "three" toWord' ('4':[]) = "four" toWord' ('5':[]) = "five" toWord' ('6':[]) = "six" toWord' ('7':[]) = "seven" toWord' ('8':[]) = "eight" toWord' ('9':[]) = "nine" toWord' ('1':'0':[]) = "ten" toWord' ('1':'1':[]) = "eleven" toWord' ('1':'2':[]) = "twelve" toWord' ('1':'3':[]) = "thirteen" toWord' ('1':'4':[]) = "fourteen" toWord' ('1':'5':[]) = "fifteen" toWord' ('1':'6':[]) = "sixteen" toWord' ('1':'7':[]) = "seventeen" toWord' ('1':'8':[]) = "eighteen" toWord' ('1':'9':[]) = "nineteen" toWord' ('2':c:[]) = "twenty" ++ toWord' (c:[]) toWord' ('3':c:[]) = "thirty" ++ toWord' (c:[]) toWord' ('4':c:[]) = "forty" ++ toWord' (c:[]) toWord' ('5':c:[]) = "fifty" ++ toWord' (c:[]) toWord' ('6':c:[]) = "sixty" ++ toWord' (c:[]) toWord' ('7':c:[]) = "seventy" ++ toWord' (c:[]) toWord' ('8':c:[]) = "eighty" ++ toWord' (c:[]) toWord' ('9':c:[]) = "ninety" ++ toWord' (c:[]) toWord' (h:'0':'0':[]) = (toWord' (h:[])) ++ "hundred" toWord' (h:'0':s:[]) = (toWord' (h:[])) ++ "hundredand" ++ (toWord' (s:[])) toWord' (h:d:s:[]) = (toWord' (h:[])) ++ "hundredand" ++ (toWord' (d:s:[])) toWord' (k:'0':'0':'0':[]) = (toWord' (k:[])) ++ "thousand" toWord' (k:h:d:s:[]) = (toWord' (k:[])) ++ "thousand" ++ toWord' (h:d:s:[])