Haskell中的解构类型

Haskell中的解构类型,haskell,types,Haskell,Types,我在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 Nu

我在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.

另外,如何从类型中获取数据?例如,如果我有
子AE1 AE2
我将如何提取
AE2

您正在寻找的是所谓的“模式匹配”。它让你解构类型,通过将它们与给定的模式相匹配。在你的情况下,你可以说:

testFunct (Num x) = ...
testFunct (Add a b) = ...
testFunct (Sub a b) = ...

你应该完成一个好的Haskell书,就像Haskell中的编程一样。

BZN已经给出了正确的答案,但是我认为你也应该提到,你可能想考虑分解这个数据类型;例如,您可以编写
data Op=Add | Sub | Mult | Div;数据AE=Num Float | Bin Op AE
。这减少了类型中的重复,并可能使此类型上的某些函数更加紧凑。