我知道没有"演员"在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)
和其他类似的东西......我总是得到一个错误。 我该怎么办?
答案 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值。