#haskell #types
#haskell #типы
Вопрос:
Я определил следующий тип в Haskell:
data AE = Num Float
| Add AE AE
| Sub AE AE
| Mult AE AE
| Div AE AE
deriving(Eq, Read, Show)
Теперь, как мне это деконструировать? В частности, как бы я выполнил функцию следующим образом:
testFunct :: AE -> something
testFunct expression
| if type Num = do this
| if type Add = then do this
etc.
Кроме того, как мне извлечь данные из типа? Например, если у меня есть Sub AE1 AE2
, как я мог бы извлечь AE2
?
Комментарии:
1. bzn дал правильный ответ, но я подумал, что, возможно, также стоит упомянуть, что вы, возможно, захотите рассмотреть факторинг этого типа данных; например, вы могли бы написать
data Op = Add | Sub | Mult | Div; data AE = Num Float | Bin Op AE AE
. Это сокращает повторение в типе и может сделать некоторые функции этого типа значительно более компактными.
Ответ №1:
То, что вы ищете, называется «сопоставление с образцом». Это позволяет вам деконструировать типы, сопоставляя их с заданным шаблоном. В вашем случае вы могли бы сказать:
testFunct (Num x) = ...
testFunct (Add a b) = ...
testFunct (Sub a b) = ...
Вы должны работать с хорошей книгой по haskell, такой как LYAH или программирование на Haskell.