Допустим, у вас есть
data SS= SSliteral Value
и
data Value= SSint Int
Теперь предположим, что у вас есть n типа SS. Вы хотите получить Int значение SS, как бы вы это сделали?
n
SS
Int
Вы соответствуете шаблону по n.
getIt :: SS -> Int getIt (SSliteral (SSint x)) = x
Предлагаю вам прочитать лях .
Определяем с синтаксисом записи:
data SS = SSliteral { ssValue :: Value } data Value = SSint { ssInt :: Int }
теперь мы определяем
getIt :: SS -> Int getIt = ssInt . ssValue
А теперь мы без очков.