如何使用GHCI查找子函数的类型

4

在GHCI中是否可能找到where语句中定义的函数类型?

例如,考虑以下函数:

myFunction a b c = case result of
                     2 -> ...
                            where
                                  subFunctA = ...
                     _ -> ...
                            where
                                  subFunctB = ...
                                  subFunctC = ...

可以使用:t myFunction命令找到myFunction的类型。

是否可以通过GHCI找到subFunctAsubFuncBsubFunctC的类型?

2个回答

2

不,GHCi无法访问其函数的源代码。即使您在GHCi中或源文件中自己定义了该函数也是如此。

作为替代方案:由于您可以访问您想了解的函数的源代码,因此您可以将函数复制到源文件的全局范围内,编译它们并查看GHC分配给它们的类型。我经常这样做。(还可以直接将它们粘贴到GHCi中。)完成后,您可以随意调用:t。这确实会产生比实际子函数更一般的类型,但仍然可能有帮助。


2
如果你使用的是足够新的GHCi版本,可以尝试使用类型空洞
基本上,如果你在代码中写下一个下划线,编译器会输出一个错误信息,告诉你这个子表达式应该有什么类型。在你的例子中,只需用“_”替换“...”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接