【发布时间】:2019-08-22 19:41:10
【问题描述】:
从 ByteString 到 Integer 的可变哈希映射。应该很容易,但可以理解为什么它不输入检查。我应该手动标注一些类型吗?
import Control.Monad.ST ( ST, runST)
import qualified Data.HashTable.Class as HC
import Data.HashTable.Class ( HashTable )
import Data.ByteString.Lazy.Char8 ( ByteString )
fourSizedTable :: HashTable h => ST s (h s ByteString Integer)
fourSizedTable = HC.newSized 4
asList :: ST s [(ByteString, Integer)]
asList = fourSizedTable >>= HC.toList
失败并显示以下消息:
• (HashTable h0) 没有实例
因使用“fourSizedTable”而产生
• 在‘(>>=)’的第一个参数中,即‘fourSizedTable’
在表达式中:fourSizedTable >>= HC.toList
在“asList”的等式中: asList =fourSizedTable >>= HC.toList
【问题讨论】:
-
我认为这里的问题是
h已从类型签名中“删除”,因此现在您有了一个不再清楚您实际使用的 hastable 的函数。跨度> -
类型错误应该还包含了
h0类型不明确的声明,这是一个重要的线索。
标签: haskell