Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.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列表理解,带“;x是从一个函数中提取的;_List_Function_Haskell_Types - Fatal编程技术网

List Haskell列表理解,带“;x是从一个函数中提取的;

List Haskell列表理解,带“;x是从一个函数中提取的;,list,function,haskell,types,List,Function,Haskell,Types,以下代码以数字开始返回整数列表。以altSumOfDigits开头的代码应该返回相同的列表,但Prelude却在抱怨类型错误,这一点我不理解 Couldn't match expected type `a' against inferred type `Integer' digits' :: Integer -> [Integer] digits' 0 = [] digits' x = (x `mod` 10) : digits' (x `div` 10) digits :: Int

以下代码以
数字开始
返回整数列表。以
altSumOfDigits
开头的代码应该返回相同的列表,但Prelude却在抱怨类型错误,这一点我不理解

Couldn't match expected type `a' against inferred type `Integer'


digits' :: Integer -> [Integer]
digits' 0 = []
digits' x = (x `mod` 10) : digits' (x `div` 10)

digits :: Integer -> [Integer]
digits 0 = [0]
digits x = reverse $ digits' x

altSumOfDigits :: Integer -> [a]
altSumOfDigits num = [ x | x <- (digits num)]
无法将预期的类型“a”与推断的类型“Integer”匹配
数字“::整数->[整数]
数字“0=[]
数字'x=(x`mod`10):数字'(x`div`10)
数字::整数->[整数]
数字0=[0]
数字x=反向$digits'x
altSumOfDigits::Integer->[a]
altSumOfDigits num=[x | x更改(或删除)altSumOfDigits的类型以返回一个
[Integer]


包括问题中的错误是一种良好的形式,如下所示:

Couldn't match type `a' with `Integer'
altSumOfDigits
的类型接受一个
Integer
的列表,但根据您声明的类型返回一个任何类型
a
的列表。因此它的返回类型是多态的

但是,您从
altSumOfDigits
中调用
digits
,它必须只返回
Integer
列表。因此,您的
altSumOfDigits
除了返回
[Integer]
更改(或删除)altSumOfDigits
的类型以返回
[Integer]


包括问题中的错误是一种良好的形式,如下所示:

Couldn't match type `a' with `Integer'
altSumOfDigits
的类型接受一个
Integer
的列表,但根据您声明的类型返回一个任何类型
a
的列表。因此它的返回类型是多态的


但是,您从
altSumOfDigits
中调用
数字
,它必须只返回一个
整数
列表。因此,您的
altSumOfDigits
除了返回一个
[Integer]

列表之外,不可能返回任何东西,因此类型[a]不仅仅是[Integer]的超级类型。我认为[a]或[a]是一个(或任何带a的)可以是任何其他类型的占位符。谢谢您的帮助。不,不是占位符。这是您向编译器声明的一项要求,即它必须适用于所有类型。因此类型[a]不仅仅是[Integer]的超类型。我认为[a]或solo a(或任何带a的)可以是任何其他类型的占位符。谢谢您的帮助。不,不是占位符。您必须向编译器声明它必须适用于所有类型。