GHCi可以告诉我本地Haskell函数的类型吗?

use*_*661 12 haskell types type-inference ghci

是否有可能在ghci中查询为另一个函数内的函数推断的类型?

Tom*_*rst 21

这是一个快速而丑陋的黑客攻击,但我通常只是以错误的方式使用该函数并阅读错误消息:

inc x = x + 1
  where
    f (y, z) = y + z
    g = f :: Char
Run Code Online (Sandbox Code Playgroud)

GHCi输出:

Couldn't match expected type `Char'
       against inferred type `(t, t) -> t'
In the expression: f :: Char
Run Code Online (Sandbox Code Playgroud)

虽然这省略了背景Num t =>,但这通常会为我提供足够的信息来继续.


Pau*_*son 12

您可以尝试通过在其上设置断点来执行此操作,因此该函数位于调试器的范围内.

另外我认为EclipseFP可以告诉你鼠标悬停在它们上面时的类型,至少在某些时候.

  • 哇,刚刚意识到断点是一个选项,在发布了一个错综复杂的半生不熟的解决方案之后...然后注意到了这个答案.GHCi在没有任何特殊刺激的情况下在断点处停止时打印出当前范围中的表达式类型,因此它只是放置的问题.+1! (3认同)
  • 不错的提示,但如果代码无法编译则无效.汤姆的回答可以派上用场. (3认同)

Rom*_*aka 7

使用GHC 7.8+,只需附加`asTypeOf` _到表达式.

有关详细说明,请参阅查找带有类型孔的表达式/函数的类型.