Haskell 现实世界哈斯克尔第26章(布卢姆过滤器)没有';在最近的GHC上编译

Haskell 现实世界哈斯克尔第26章(布卢姆过滤器)没有';在最近的GHC上编译,haskell,Haskell,我正在用自己的方式阅读哈斯克尔的书。许多示例都没有在最近的GHC上编译。我不确定在哪里可以找到发生在GHC上的变化,而谷歌在查找我看到的错误消息时也不是很主动。看来在实施结婚协议的过程中一定有什么改变了 $ ghc --version The Glorious Glasgow Haskell Compilation System, version 7.4.1 以及: 欢迎来到堆栈溢出。您能更具体地说明您的问题是什么吗?当您提出问题时,请尽可能发布或链接源代码。干净地从编译器复制源代码。您显然错

我正在用自己的方式阅读哈斯克尔的书。许多示例都没有在最近的GHC上编译。我不确定在哪里可以找到发生在GHC上的变化,而谷歌在查找我看到的错误消息时也不是很主动。看来在实施结婚协议的过程中一定有什么改变了

$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.4.1
以及:


欢迎来到堆栈溢出。您能更具体地说明您的问题是什么吗?当您提出问题时,请尽可能发布或链接源代码。干净地从编译器复制源代码。您显然错了,例如,被指控的
(\bit->writeArray(mutArray)bit True)
实际上有
writeArray(mutArray filt)bit True
。其他的看起来像是从不可变数据类型复制到可变数据类型。另外,
ghc-o BloomFilter/Mutable.hs
是错误的,您不想用
-o
重定向非主模块的输出。嘿,丹尼尔,我已经直接从书的网站(即)复制了源代码。我仍然会犯同样的错误。请记住,我使用的是ghc 7.4.1。无论编译行中是否包含-o bloom,我都会继续得到相同的错误。源代码是Daniel引用的,并且在zip文件I link Thomas中。谢谢大家的帮助。您可以通过更改:
B hash使BloomFilter.hs编译。runSTUArray$
B哈希$runSTUArray$
,如下所示:
$ ghc -o bloom BloomFilter/Mutable.hs
[2 of 2] Compiling BloomFilter.Mutable ( BloomFilter/Mutable.hs, BloomFilter/Mutable.o )

BloomFilter/Mutable.hs:21:36:
    No instance for (Data.Array.Base.MArray
                       Data.Array.Base.UArray Bool (ST s))
      arising from a use of `newArray'
    Possible fix:
      add an instance declaration for
      (Data.Array.Base.MArray Data.Array.Base.UArray Bool (ST s))
    In the second argument of `liftM', namely
      `newArray (0, numBits - 1) False'
    In the expression: MB hash `liftM` newArray (0, numBits - 1) False
    In an equation for `new':
        new hash numBits = MB hash `liftM` newArray (0, numBits - 1) False

BloomFilter/Mutable.hs:26:36:
    No instance for (Data.Array.Base.MArray
                       Data.Array.Base.UArray Bool (ST s))
      arising from a use of `getBounds'
    Possible fix:
      add an instance declaration for
      (Data.Array.Base.MArray Data.Array.Base.UArray Bool (ST s))
    In the second argument of `liftM', namely
      `getBounds (mutArray filt)'
    In the expression: (succ . snd) `liftM` getBounds (mutArray filt)
    In an equation for `length':
        length filt = (succ . snd) `liftM` getBounds (mutArray filt)

BloomFilter/Mutable.hs:30:77:
    Couldn't match expected type `MutBloom s0 a0'
                with actual type `Word32'
    In the second argument of `writeArray', namely `bit'
    In the expression: writeArray (mutArray) bit True
    In the first argument of `mapM_', namely
      `(\ bit -> writeArray (mutArray) bit True)'

BloomFilter/Mutable.hs:40:44:
    No instance for (Data.Array.Base.MArray
                       Data.Array.Base.UArray Bool (ST s))
      arising from a use of `readArray'
    Possible fix:
      add an instance declaration for
      (Data.Array.Base.MArray Data.Array.Base.UArray Bool (ST s))
    In the first argument of `allM', namely
      `(readArray (mutArray filt))'
    In the second argument of `(>>=)', namely
      `allM (readArray (mutArray filt))'
    In the expression:
      indices filt elt >>= allM (readArray (mutArray filt))