diff options
| -rw-r--r-- | lec07/JoinList.hs | 1 | ||||
| -rw-r--r-- | lec07/Scrabble.hs | 22 |
2 files changed, 23 insertions, 0 deletions
diff --git a/lec07/JoinList.hs b/lec07/JoinList.hs index ccfa838..5e1949f 100644 --- a/lec07/JoinList.hs +++ b/lec07/JoinList.hs @@ -1,6 +1,7 @@ module JoinList where import Sized +import Scrabble data JoinList m a = Empty | Single m a 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 |