如何:在ghci中访问所有内省信息?

men*_*ics 6 haskell introspection typeclass ghci

似乎不可能对函数和数据类型等类型类约束进行内省.然而,ghci似乎做到了.

Prelude> :t show
show :: (Show a) => a -> String
Run Code Online (Sandbox Code Playgroud)

所以...不知怎的,它知道类型类约束,因为它打印出来.它是怎么做到的?

gee*_*aur 10

信息保存在接口文件(module.hi)中.要从正在运行的程序中获取它,您需要查找和读取.hi文件(Hackage上的提示包执行此操作,我相信); 由于在编译到字节码的过程中ghci读取.hi文件,因此可以方便地获得该信息.

你可以看到.hi文件中的内容ghc --show-iface module.hi.