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的)可以是任何其他类型的占位符。谢谢您的帮助。不,不是占位符。您必须向编译器声明它必须适用于所有类型。