Haskell isn't fun unless you use monads. Monads aren't fun unless you use monad transformers :) -- import Control.Monad.State -- new data type data Beer = B Int -- factorize code a little bit tk = "Take one down and pass it around, " wall = " of beer on the wall.\n" end 1 = tk++"1 bottle"++ wall end n = tk++show n++" bottles"++wall -- define the way our brand new data type shows up instance Show Beer where show (B 0) = "No more bottle of beer on the wall, no more bottle of beer.\n" ++ "Go to the store and b