diff options
Diffstat (limited to 'lec07/Scrabble.hs')
| -rw-r--r-- | lec07/Scrabble.hs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lec07/Scrabble.hs b/lec07/Scrabble.hs new file mode 100644 index 0000000..2c3b1f9 --- /dev/null +++ b/lec07/Scrabble.hs @@ -0,0 +1,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 |