这个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 ...
但是那是在编译时 - 我仍然希望这个信息在运行时的某个地方可用。