我知道由于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
这在演示中没有帮助。
出于演示目的,您可以尝试使用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
根本行不通。
不过,如果您为演示准备示例,则可以提前检查它们并确保它们有效。