在Haskell中输入类型

时间:2014-10-11 14:37:01

标签: haskell

我知道没有"演员"在Haskell,但我有这个表达:

o = sum . takeWhile (< 10000) . filter odd . map (^2) $ [1..]

我希望将结果作为Double。 我试过了:

g :: (Integral c, Double b) => [c] -> b
g =sum . takeWhile (< 10000) . filter odd . map (^2)

和其他类似的东西......我总是得到一个错误。 我该怎么办?

1 个答案:

答案 0 :(得分:4)

怎么样

g :: [Integer] -> Double
g = fromInteger . sum . takeWhile (< 10000) . filter odd . map (^2)

或者,您可以在总和之前将列表转换为[Double]

g = sum . map fromInteger . takeWhile (< 10000) . filter odd . map (^2)

Haskell中没有泛型强制转换,但有些函数(如fromInteger和fromRational)可以从特定类型转换为所需类型。 fromIntegral的类型是 fromIntegral :: (Num b, Integral a) => a -> b 它会将Integral值转换为任何类型的Num值。