是否可以在Haskell(ghci)中显示函数名称?

时间:2019-12-18 09:01:18

标签: haskell functional-programming ghc

我知道因为Haskell进行了优化,所以show the function's body是不可能的,但是有可能以某种方式显示它的 name 吗?

我想要类似的东西

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

这对演示没有帮助。

1 个答案:

答案 0 :(得分:3)

出于演示目的,您可以尝试使用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完全无效。

不过,如果您准备了示例进行演示,则可以事先检查它们并确保它们能正常工作。