2015-04-21 139 views
2
print $ concat ["abc", "bde"] 

打印點對戰美元符號

abcbde 

而,

print . concat ["abc", "bde"] 

在第二種情況下引發的錯誤是,

Couldn't match expected type ‘a -> b0’ with actual type ‘[Char]’ 
Relevant bindings include 
    it :: a -> IO() (bound at <interactive>:3:1) 
Possible cause: ‘concat’ is applied to too many arguments 

.(功能的組合物運算符)是因爲我認爲會的取出concat函數的輸出並將其傳遞給前面的函數print?代碼中有什麼錯誤?

回答

7

只是優先,真的;這將很好地工作:

(print . concat) ["abc", "bde"] 

.組成兩個函數來創建一個新的功能,而$只是避免在這方面括號方式。

+0

感謝您通過試用和錯誤知道如何處理的事情的簡單解釋,但從未真正理解爲什麼:) – vikingsteve

+0

如果您將它們傳遞給高階函數,則差異更大 –

+1

您也可以執行「打印。 concat $ [「abc」,「bde」]' – mb14