Как вы уже заметили, вы не можете просто встроить сюда; причина в том, что вы сопоставляете шаблон с Stone
в giveValueDice
. Это сопоставление с образцом может быть перемещено в правую часть списка понимания:
calculateScore :: [Dobbelsteen] -> Int
calculateScore xs = sum[if d == 'W' then 5 else digitToInt d | (Stone d) <- xs]
Другим методом объединения этих двух функций является использование предложения where
, которое «сливает» одну функцию в другую, сохраняя при этом их различие:
calculateScore :: [Dobbelsteen] -> Int
calculateScore xs = sum[giveValueDice x | x <- xs]
where
giveValueDice :: Dice -> Int
giveValueDice (Stone d) = if d == 'W' then 5 else digitToInt d