summaryrefslogtreecommitdiff
path: root/lec07/Scrabble.hs
blob: b0b34f980569c227616b0326fb1917dcd58a2fe4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
module Scrabble where
import Data.Char
import Data.List

-- Exercise 3

newtype Score = Score Int
  deriving (Eq, Ord, Show, Num)

-- Needed due to changes in the standard library, see Sized.
instance Semigroup Score where
  (<>) = (+)

instance Monoid Score where
  mempty = Score 0

score :: Char -> Score
score c = Score $ fromMaybe 0 $ (!?) scores $ fromEnum (toUpper c) - fromEnum 'A'
  where scores = [1,3,3,2,1,4,2,4,1,8,5,1,3,1,1,3,10,1,1,1,1,4,4,8,4,10] :: [Int]

scoreString :: String -> Score
scoreString = foldl' <> mempty