2012-04-22 37 views
2

我有正常工作的功能:爲什麼我在這個Haskell代碼中找不到預期的類型?

 z::Int->Int->[Char] 
     z x y =show(x)++show(y)++show(x*y) 

這真的只是將一些數字成字符串的函數。 然後我用快速排序功能快速排列字符串。

quicksort.z 2 3 

但在這裏我得到的錯誤

Couldn't match expected type `a0 -> [a1]' with actual type `[Char]' 
In the return type of a call of `z' 
In the second argument of `(.)', namely `z 2 3' 
In the expression: flagskib . z 2 3 

我試着像括號和使用$的功能,但沒有幫助修復。

我欣賞它上面的任何單詞。這個問題已經解決了,所以這篇文章的全部意義是要學習。

回答

9

quicksort需要一個參數。 z需要兩個。組成運算符具有以下類型

(.) :: (b -> c) -> (a -> b) -> a -> c 

也許您現在可以看到問題了。類型不匹配。

quicksort $ z 2 3 

將工作。因此將quicksort . z 2 $ 3或類似(quicksort . z 2) 3,因爲z應用於參數2返回一個參數的函數,該參數匹配(.)(部分應用程序)的類型。

6

我假設quicksort有類型[a] -> [a](.)用於功能組合,因此它需要編寫兩個功能,但您改爲使用[Char]。你寫的相當於\x -> quicksort ((z 2 3) x),這顯然不起作用。 您應該使用($)而不是右對應函數應用程序:quicksort $ z 2 3,相當於quicksort (z 2 3)

相關問題