Sha256: 4203d90959dcad82dd59f3aad4569bfa192e46f75353480d603897ecbcd51737

Contents?: true

Size: 884 Bytes

Versions: 395

Compression:

Stored size: 884 Bytes

Contents

module Beer (song) where

import Data.Char (toUpper)
import Data.List (intercalate)

capitalize :: String -> String
capitalize (h : t) = toUpper h : t
capitalize [] = []

bottles :: Int -> String
bottles 1 = "bottle"
bottles _ = "bottles"

countBottles :: Int -> String
countBottles 0 = "no more"
countBottles n = show n

stanza :: Int -> String
stanza n | n >= 0    = countBottles n ++ " " ++ bottles n ++ " of beer"
         | otherwise = stanza 99

it :: Int -> String
it 1 = "it"
it _ = "one"

action :: Int -> String
action n | n > 0     = "Take " ++ it n ++ " down and pass it around"
         | otherwise = "Go to the store and buy some more"

verse :: Int -> String
verse n = unlines
  [ capitalize (stanza n) ++ " on the wall, " ++ stanza n ++ "."
  , action n ++ ", " ++ stanza (pred n) ++ " on the wall." ]

song :: String
song = intercalate "\n" $ map verse [99, 98 .. 0]

Version data entries

395 entries across 395 versions & 1 rubygems

Version Path
trackler-2.2.1.139 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.138 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.137 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.136 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.135 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.134 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.133 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.132 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.131 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.130 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.129 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.128 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.127 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.126 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.125 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.124 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.123 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.122 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.121 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs
trackler-2.2.1.120 tracks/haskell/exercises/beer-song/examples/success-standard/src/Beer.hs