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