summaryrefslogtreecommitdiff
path: root/lec07/Scrabble.hs
blob: 2c3b1f9e5fafde8df7c0e553f312d10392484ddb (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