Haskell:确定数据类型中参数的类型
假设我定义了一种数据类型,如下所示:Haskell:确定数据类型中参数的类型,haskell,ghc,Haskell,Ghc,假设我定义了一种数据类型,如下所示: data Type = MyInt | MyBool | MyFun Type Type 我有一个变量type_a=MyFun MyInt MyBool 我还有另一个变量type_b=MyInt 如何检查type_b=type_a(MyInt)中的第一个参数?您可以派生Eq,然后使用模式匹配来分解MyFun,并将第一个参数与type_b进行比较: data Type=MyInt | MyBool | MyF
data Type = MyInt |
MyBool |
MyFun Type Type
我有一个变量type_a=MyFun MyInt MyBool
我还有另一个变量type_b=MyInt
如何检查type_b=type_a(MyInt)中的第一个参数?您可以派生
Eq
,然后使用模式匹配来分解MyFun
,并将第一个参数与type_b
进行比较:
data Type=MyInt | MyBool | MyFun类型派生公式
类型a=MyFun MyInt MyBool
类型b=MyInt
firstArgEquals::类型->类型->布尔
firstArgEquals(MyFun a u)b=a==b
firstArgEquals uuz=假
firstArgEquals type_a type_b——返回True
您可以使用模式匹配,因此:f(Type x))=x
和Type_b=f Type_a
导出Eq
还允许您在使用Willem建议的模式匹配提取域类型后使用=
。例如,x类型的案例类型a->x==type\u b;\u->如果type_b
是type_a
的域,则False
将计算为True
。并且,不要对其进行太精细的说明,但是派生的Eq
实例不需要编译器魔法来实现。这只是个速记。你可以自己用手把它写出来,它将使用完全相同的机制:模式匹配。