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