首页 > 解决方案 > 是否可以在 Haskell (ghci) 中显示函数名称?

问题描述

我知道由于 Haskell 进行了优化,因此无法显示函数的主体,但是有可能以某种方式显示它的名称吗?

我想要类似的东西

Prelude> f
[Function f]

类似于其他 REPL 所做的事情(Python、javascript 等)

我用 Haskell 得到的是

Prelude> f
<interactive>:2:1: error:
    • No instance for (Show (Integer -> Integer)) arising from a use of ‘print’ (maybe you haven't applied a function to enough arguments?)
    • In a stmt of an interactive GHCi command: print it

这对演示没有帮助。

标签: haskellfunctional-programmingghc

解决方案


出于演示目的,您可以尝试使用该simple-reflect软件包。它允许某些形式的符号计算:

> foldr f x [1,2,3]
f 1 (f 2 (f 3 x))
> foldl f x [1,2,3]
f (f (f x 1) 2) 3

请注意,它有其自身的局限性。例如(f . g) x,除非使用合适的类型注释,否则将无法工作。[1] ++ x根本行不通。

不过,如果您为演示准备示例,您可以提前检查它们并确保它们有效。


推荐阅读