2014-09-12 56 views
4

我想了解Philip Wadler的「函數式編程本質」,而且我似乎被他的斷言「沒有Haskell知識來理解本文所必需的」所斷言。也許不是,但他的例子肯定需要一些。我想了解his example interpreter。當我嘗試使用GHC編譯此文件,或使用:load加載它時,它會投訴not in scope: showint. Perhaps you meant showInt。當我用showInt代替令牌時,它說Not in scope: showIntHaskell'showInt'不在範圍內:爲什麼不呢?

當他說我需要知道的一切都包含在他的論文中時,我真的很想相信瓦德勒博士。

我真的很想讓它在GHCI下工作,所以我可以在解釋器下嘗試各種表達式。我是Haskell的新手,並且對其錯誤消息的不透明性進行了適當的警告,但這似乎是爲了困擾!

+0

底部有一個['showInt'](http://hackage.haskell.org/package/base-4.7.0.1/docs/Numeric.html#v:showInt),但它會返回一個'ShowS' type,它是'String - > String'的別名,所以它也不會在這裏檢查。這看起來更像是他的代碼中的一個錯誤。 – bheklilr 2014-09-12 21:13:41

回答

6

showInt功能是Numeric模塊的一部分,所以您必須import Numeric才能使其在範圍內。我猜錯誤提示系統知道你沒有導入的模塊。

showInt也不直接返回字符串,而是返回String -> String函數。我認爲這個功能是用來更有效地顯示由多個部分組成的東西,但是在這裏它只是一個痛苦,你的代碼不會按照原樣進行類型檢查。

取而代之,您可以用show代替showint,讓編譯器找出它。 show是Haskell的toString,並且對於任何類型都是重載的,所以轉換爲字符串是合理的。

+6

顯然,2014年的GHCi與1992年的這篇論文發佈時的版本有些不同。 – 2014-09-12 22:08:36

+4

22年來,語言的發展對語言產生影響。 – 2014-09-12 22:38:39

+0

@ElfSternberg:那篇論文比我大一歲:/。 – 2014-09-12 23:15:36