我正在尝试在我的系统上运行hafka。对于相同的元素类型Data.ByteString.Internal.ByteString
,由于版本号不匹配,haskell会引发错误。
Couldn't match expected type ‘bytestring-0.10.4.0:Data.ByteString.Internal.ByteString’
with actual type ‘B.ByteString’
NB: ‘bytestring-0.10.4.0:Data.ByteString.Internal.ByteString’
is defined in ‘Data.ByteString.Internal’
in package ‘bytestring-0.10.4.0’
‘B.ByteString’
is defined in ‘Data.ByteString.Internal’
in package ‘bytestring-0.10.6.0’
在我的系统上,当我运行ghc-pkg list | grep bytestring
时,它显示,
bytestring-0.10.4.0
。
ghc
未使用版本化bytestring-0.14.0
的软件包。 haskell在哪里获得实际的类型版本 - bytestring-0.10.6.0
?
我没有看到任何跨库版本检查类型安全的语言。为什么haskell会这样做?
答案 0 :(得分:3)
您可能正在使用沙盒,在这种情况下,您可以查看沙盒中的哪些包,例如
timeout()
我还没有看到任何跨库版本检查类型安全的语言。为什么haskell会这样做?
没有先验的理由相信包的一个版本中名为cabal exec ghc-pkg list bytestring
的类型在语义上与包的另一个版本中具有相同名称的类型相同。作为一个保守的规则,GHC根本不允许混合。注意,检查两种类型在语义上是否相同并不仅限于查看其数据的表示;还需要比较它们的类型类实例,这是一个明显不可判定的问题。有人可能会想到,未来的GHC会尝试在这方面进行更多的分析,但这并不是一个迫切的需求 - 通常,简单地针对每个依赖项的一个且仅一个版本构建程序包并不难。 p>