Problem 17

http://projecteuler.net/index.php?section=problems&id=17

1から1000までを全て英語表記したら何文字になるのか?(スペースとハイフンは除く)
そのまま解いた。
1〜99 の文字数は、100から199の文字数に使えるけどやめた。

main = print $ length $ concat $ map toLetter [1..1000]

toLetter    0 = ""
toLetter    1 = "one"
toLetter    2 = "two"
toLetter    3 = "three"
toLetter    4 = "four"
toLetter    5 = "five"
toLetter    6 = "six"
toLetter    7 = "seven"
toLetter    8 = "eight"
toLetter    9 = "nine"
toLetter   10 = "ten"
toLetter   11 = "eleven"
toLetter   12 = "twelve"
toLetter   13 = "thirteen"
toLetter   14 = "fourteen"
toLetter   15 = "fifteen"
toLetter   16 = "sixteen"
toLetter   17 = "seventeen"
toLetter   18 = "eighteen"
toLetter   19 = "nineteen"
toLetter   20 = "twenty"
toLetter   30 = "thirty"
toLetter   40 = "forty"
toLetter   50 = "fifty"
toLetter   60 = "sixty"
toLetter   70 = "seventy"
toLetter   80 = "eighty"
toLetter   90 = "ninety"
toLetter 1000 = "one" ++ "thousand"
toLetter i | i <= 99          = ten ++ one
           | i `mod` 100 == 0 = hundred
           | i <= 999         = hundred ++ "and" ++ toLetter (i `mod` 100)
           where hundred = toLetter (i `div` 100) ++ "hundred"
                 ten     = toLetter ((i `mod` 100) `div` 10 * 10)
                 one     = toLetter (i `mod` 10)