2012-01-14 22 views
5

沒有實例顯示在GHCI,我鍵入以下內容:Haskell的新手:在地圖功能

map (+1) [1..10] 

返回 [2,3,4,5,6,7,8,9,10, 11]

到目前爲止這麼好。

現在我鍵入:

min (map (+1) [1..10]) 

,我得到了以下錯誤消息:

No instance for (Show ([b0] -> [b0])) 
    arising from a use of `print' 
Possible fix: add an instance declaration for (Show ([b0] -> [b0])) 
In a stmt of an interactive GHCi command: print it 

這是很奇怪的我。爲什麼Haskell認爲我試圖打印任何參數,我該如何解決這個問題?

回答

12

問題是min需要兩個參數(並返回兩個參數中的最小值),但您只指定了一個參數;你想要minimum,這是在列表上工作的版本。

具體而言,發生此錯誤是因爲GHCi會嘗試打印出您評估的表達式的結果,但在這種情況下,您已將min應用於一個參數,從而產生另一個函數。 GHCi忠實地嘗試打印出來,但它失敗了,因爲函數不是Show的實例,它是可以表示爲顯示字符串的標準類型類。在Haskell中,所有函數都帶有一個參數,並且多個參數的函數由返回其他函數的函數構建;例如,添加兩個整數的函數的類型可能爲Integer -> Integer -> Integer,即Integer -> (Integer -> Integer)--一個採用Integer並返回另一個函數的函數,該函數本身接受一個I​​nteger,並返回一個Integer。值得慶幸的是,你不必經常用這種明確的術語思考這個問題,否則它會變得非常混亂!

+0

謝謝!出於某種原因,我認爲,min,就像在列表上運行的總和或產品一樣。最低! – Bylextor 2012-01-14 19:21:58

+0

@Bylextor:不客氣!如果我的回答對你有幫助,你應該點擊它旁邊的勾號來幫助其他人:) – ehird 2012-01-14 19:23:53

+0

完成。這是一個很好的解釋! – Bylextor 2012-01-14 19:32:37