我正在试图理解Philip Wadler的“功能编程的本质”,而我似乎对他的断言感到沮丧,“不需要了解Haskell来理解本文。”也许不是,但他的例子肯定需要一些。
具体来说,我正在努力理解his example interpreter。当我尝试使用GHC编译它,或使用:load
加载它时,它会抱怨not in scope: showint. Perhaps you meant showInt
。当我用showInt
替换令牌时,它会显示Not in scope: showInt
。
我真的很想相信Wadler博士,他说我需要知道的一切都包含在他的论文中。
我真的想让它在GHCI下运行,所以我可以在解释器下尝试各种表达式。我是Haskell的新手,并且对其错误消息的不透明性进行了适当的警告,但这似乎是为了让人感到困惑!
答案 0 :(得分:6)
showInt
函数是Numeric
模块的一部分,因此您必须import Numeric
才能将其置于范围内。我猜拼写提示系统知道你还没有导入的模块。
showInt
也不会直接返回字符串,而是返回String -> String
函数。我认为这个功能用于更有效地显示由多个部分组成的内容,但在这里它只是一个痛苦而且你的代码不会像现在这样进行类型检查。
相反,您可以用showint
替换show
,让编译器弄明白。 show
是Haskell的toString
,并且对于转换为字符串合理的任何类型都会超载。