Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell:确定数据类型中参数的类型_Haskell_Ghc - Fatal编程技术网

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
实例不需要编译器魔法来实现。这只是个速记。你可以自己用手把它写出来,它将使用完全相同的机制:模式匹配。