为什么变量不在范围内?

时间:2016-10-05 08:21:41

标签: haskell floating-point

我有类似的代码,但使用getWord8和getWord32le,为什么getFloatle会给我错误?

import qualified Data.ByteString.Lazy as BS
import Data.Word
import Data.Bits
import Data.Binary.Get

readfloat :: BS.ByteString -> Int -> Float
readfloat contents startpos = runGet getFloatle (BS.drop (fromIntegral startpos) contents)

main :: IO ()
main = do
    let myfile = "DATA.BIN"
    contents <- BS.readFile myfile
    let stuff = readfloat contents 1042346125
    print stuff

收到以下错误:

test2.hs:7:38: error:
    Variable not in scope: getFloatle :: Get Float

1 个答案:

答案 0 :(得分:4)

在binary-0.8.4.0中添加了

getFloatle。我猜你使用的是binary-0.8.3.0,可能来自Stackage或Haskell平台。

要使用最新的二进制版本,第一步是在cabal文件中放置下限。例如:

...

  build-depends:
    ...,
    binary >= 0.8.4.0 && < 0.9,
    ...
...

这表示您至少需要0.8.4.0版本(因此您可以使用getFloatle)和最多版本0.8.something(因此您可以防止0.9系列可能引入的未来更改) )。如果您不关心未来的变化,也可以省略&& < 0.9

如果您使用此更新的cabal文件使用cabal编译代码,cabal应为您下载并安装适当版本的binary