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