Деконструкция типов в Haskell

#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.