我希望能够在 ghci 中输入以下内容:
map showTypeSignature [(+),(-),show]
我希望 ghci 返回以下字符串列表:
["(+) :: Num a => a -> a -> a","(-) :: Num a => a -> a -> a","show :: Show a => a -> String"]
自然,我遇到的第一个问题是我无法构造第一个列表,因为函数的类型签名不匹配。我能做些什么来构建这样一个列表? ghci如何完成类型签名的打印? ghci 命令 :t 定义在哪里(它的来源)?
最佳答案
你所要求的实际上是不可能的。您无法从 Haskell 中轻松确定 Haskell 术语的类型签名。在运行时,几乎没有可用的类型信息。 GHCi 命令 :t
是一个 GHCi 命令,而不是解释的 Haskell 函数,这是有原因的。
要做一些接近你想要的事情,你必须使用 GHC 本身,作为一个库。 GHC 为此提供了 GHC API。但是你将不能使用任意的 Haskell 术语,而必须以 String
开头。代表您的条款。此外,在运行时调用编译器必然会产生 IO
输出。
关于haskell - 打印类型签名列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22344158/