Я новичок в Haskell и прохожу свой путь через проект "Напиши себе схему за 48 часов" и столкнулся с ситуацией, когда я хочу получить базовый тип из типа данных и не уверен, как это сделать без написания преобразований для каждого варианта типа. Например, в типе данных
data LispVal = Atom String
| List [LispVal]
| DottedList [LispVal] LispVal
| Number Integer
| String String
| Bool Bool
| Double Double
я хочу написать что-то вроде: (я знаю, что это не работает)
extractLispVal :: LispVal -> a
extractLispVal (a val) = val
или даже
extractLispVal :: LispVal -> a
extractLispVal (Double val) = val
extractLispVal (Bool val) = val
Возможно ли это сделать? В основном я хочу иметь возможность делать обратный кастинг из LispVal, если мне нужно использовать основной тип.
Спасибо! Simon