List Haskell列表理解(打印列表元素的sqrt)
我有GHCi,版本7.8.3。我想计算sqrt项的总和,它可以被10整除List Haskell列表理解(打印列表元素的sqrt),list,haskell,list-comprehension,List,Haskell,List Comprehension,我有GHCi,版本7.8.3。我想计算sqrt项的总和,它可以被10整除 如果我写[x | x问题来自这样一个事实:当您使用mod时,数字的类型必须是Integral a=>a,而当您使用sqrt时,数字的类型必须是Floating a=>a。GHC知道没有适合这两个约束的类型,尽管因为您正在执行它在GHCi中,无论出于何种原因,错误消息基本上都是无用的。错误消息是这样的,因为GHCi使用打印,它调用显示,出于某种原因,这是第一个被检查的约束。由于没有具有约束的类型显示,积分,和浮动,它不进行打
如果我写
[x | x问题来自这样一个事实:当您使用mod
时,数字的类型必须是Integral a=>a
,而当您使用sqrt
时,数字的类型必须是Floating a=>a
。GHC知道没有适合这两个约束的类型,尽管因为您正在执行它在GHCi中,无论出于何种原因,错误消息基本上都是无用的。错误消息是这样的,因为GHCi使用打印
,它调用显示
,出于某种原因,这是第一个被检查的约束。由于没有具有约束的类型显示
,积分
,和浮动
,它不进行打字检查
您的其他两个示例进行了类型检查,因为它们只使用了mod
或sqrt
中的一个。在应用sqrt
之前,您可以使用from integral
将这两个示例组合起来:
sum [sqrt $ fromIntegral x | x <- [10..100], x `mod` 10 == 0]
sum[sqrt$from Integral x | x使我想知道是否有任何类型的Integral
和Float
都具有合理的实例。我注意到类似fx=sqrt(mod x10)
的类型检查定义了f::(Floating a,Integral a)类型的函数=>a->a
——但我不知道哪种类型的a
适合这个账单。:-}
sum [sqrt $ fromIntegral x | x <- [10..100], x `mod` 10 == 0]