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

How to find the type of subfunctions with GHCI

是否可以使用 GHCI 找到 where 语句中定义的函数类型?

例如,考虑这个函数:

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

myFunction的类型可以用:t myFunction查找。

是否可以使用 GHCI 找到 subFunctAsubFuncBsubFunctC 的类型?

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

作为替代方案:由于您可以访问您想知道的函数的源代码,您可以将这些函数复制到源文件的全局范围内,编译它们,然后查看 GHC 分配给它们的类型。我经常这样做。 (另外,您可以直接将它们粘贴到 GHCi 中。)完成此操作后,您可以随心所欲地对它们调用 :t。这确实 运行 产生比实际子函数更通用的类型的风险,但它仍然可以帮助你。

如果您有足够新的 GHCi 版本,您可以尝试使用 typed holes

基本上,如果您在代码中写下划线,编译器会吐出一条错误消息,告诉您子表达式 应该 的类型。在您的示例中,只需将“...”替换为“_”。