From 52e7f3d06b22959212c114f557a392d986d65fc9 Mon Sep 17 00:00:00 2001 From: Edoardo La Greca Date: Sun, 14 Sep 2025 20:15:53 +0200 Subject: add third exercise of lecture 7 --- lec07/JoinList.hs | 1 + lec07/Scrabble.hs | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 lec07/Scrabble.hs 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 -- cgit v1.2.3