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
List 如何为Haskell';s集合生成器符号?_List_Haskell - Fatal编程技术网

List 如何为Haskell';s集合生成器符号?

List 如何为Haskell';s集合生成器符号?,list,haskell,List,Haskell,具体来说,我想做如下工作: myfunc:: [(Integer, Integer)] myfunc = [(x^2 - y^2, 2 * x * y) | x <- [1..], y <- [1.. (x-1)]] 因此,我知道x显然应该是一个整数,我如何继续并让Haskell知道这就是我想要的?这里的问题是^具有类型(Num a,Integral b)=>a->b->a,因此^的第二个参数可以是任何整数类型。因为结果类型是IntegerHaskell知道a是整数,但它对b一无所

具体来说,我想做如下工作:

myfunc:: [(Integer, Integer)]
myfunc = [(x^2 - y^2, 2 * x * y) | x <- [1..], y <- [1.. (x-1)]]

因此,我知道x显然应该是一个
整数
,我如何继续并让Haskell知道这就是我想要的?

这里的问题是
^
具有类型
(Num a,Integral b)=>a->b->a
,因此
^
的第二个参数可以是任何整数类型。因为结果类型是
Integer
Haskell知道
a
是整数,但它对
b
一无所知。由于不知道该做什么,它默认为
Integer
,并生成警告。由于在这种情况下这是完全正常的,您可以忽略或禁用警告

但是,如果希望添加类型批注以明确表示希望正确的操作数具有整数类型,则可以这样做:

(x^(2::Integer) - y^(2::Integer), 2 * x * y)

作为旁注:
[]
创建一个列表,而不是一个集合。

更具体地说,警告是关于
2
,而不是关于
x
(或
y

肯尼特的建议或写为(xx-yy,…)将使警告消失


另外,请注意,这是一个警告-您的系统似乎设置为在程序中提供尽可能多的警告(“-Wall”),这是掌握编译器认为您在做什么的一个好方法。因为这只是一个警告,你可以随意忽略它;它会做你想做的。最好是让人们输入警告出现的原因,以便更好地了解系统。

是的,有一个列表。它通常被称为“列表理解”。
(x^(2::Integer) - y^(2::Integer), 2 * x * y)