2016-04-23 114 views
0

我一直在閱讀七週中的七種語言書籍,並正在與Haskell合作。Haskell'無法與實際類型匹配預期類型'

我的問題掙扎:

寫那種需要一個列表和比較它的兩個參數,然後返回一個排序列表的功能。

我在網上尋找幫助,發現了一個解決方案,但我甚至無法得到解決方案,因爲預計會出現實際的類型錯誤。

這是我一直在試圖代碼:

module Main where 
import Data.List 
sortList :: (Ord a) => (a -> a -> Ordering) -> [a] -> [a] 
sortList comparator list = sortBy comparator list 

以下是錯誤:

*Main> sortList [5,4,2,7,8,1] 

<interactive>:1:10: 
    Couldn't match expected type `a -> a -> Ordering' 
       with actual type `[t]' 
    In the first argument of `sortList', namely `[5, 4, 2, 7, ....]' 
    In the expression: sortList [5, 4, 2, 7, ....] 
    In an equation for `it': it = sortList [5, 4, 2, ....] 

我的思考和嘗試:

也許我我打電話功能錯了嗎?我對Haskell相當陌生。 II也嘗試了許多搜索。我所能得出的結論是某處的類型不匹配。我想對劇本的解釋和指導對我很有幫助。

+1

好你的簽名alrea dy說:調用'sortList'需要一個你沒有提供的'比較器'... –

回答

2

你的函數簽名說:

"sortList is a function that takes:"

  • function (a -> a -> Ordering) that take two elements of type 'a' and returns an 'Ordering' [this is your comparator]
  • List of items 'a' ([a]) that you are passing it
  • Returns a list of items 'a' ([a])

試着打電話給他們以這樣的方式

sortList compare [3,2,1] 

更多閱讀這裏: https://hackage.haskell.org/package/base-4.8.2.0/docs/Data-Ord.html

這裏: http://zvon.org/other/haskell/Outputprelude/compare_f.html

+0

工作。你能簡要解釋一下爲什麼? – Justin

+0

你看過我的評論嗎?你需要將比較器方法傳遞給你的函數。 '比較'是你需要的比較器。 欲瞭解更多信息,請訪問:http://zvon.org/other/haskell/Outputprelude/compare_f.html and here: https://hackage.haskell.org/package/base-4.8.2.0/docs/Data -Ord.html – granmirupa

1

您正在調用錯誤的函數,您需要將它傳遞給比較函數。您只需將一個列表傳遞給該函數。

相關問題