tyConPackage从ghc-7.8变为ghc-7.10?

时间:2015-04-14 22:05:19

标签: haskell ghc

这个ghci会议

import Data.Map
import Data.Typeable
tyConPackage $  typeRepTyCon $  typeOf $ fromList [(1,2)]

给出

in ghc-7.8.4: "containers-0.5.5.1"
in ghc-7.10.1: "conta_47ajk3tbda43DFWyeF3oHQ"

新行为会破坏我的应用程序,因为我使用此字符串 以编程方式构建文档URL(指向由standalone-haddock构建的html)

有没有办法恢复旧的行为?一些解决方法?

-

我做了一些研究并找到了(ghc / compiler / basicTypes / Module.lhs):

7.8.4(compiler / typecheck / TcGenDeriv构建实例并使用)

-- | Essentially just a string identifying a package, including the version: e.g. parsec-1.0
newtype PackageId = PId FastString deriving( Eq, Typeable )

7.10.1(编译器/ deSugar / DsBinds构造证据(?)和)使用

-- | A string which uniquely identifies a package.  For wired-in packages,
-- it is just the package name, but for user compiled packages, it is a hash.
newtype PackageKey = PId FastString deriving( Eq, Typeable )

嗯,“唯一识别”很不错,但是......

-

另一方面,ghci以某种方式知道(未编组的)包名称:

import Data.Map ; :i Map
data Map k a = containers-0.5.5.1:Data.Map.Base.Bin ...

但是那是在编译时 - 我仍然希望这个信息在运行时的某个地方可用。

0 个答案:

没有答案