2015-02-23 56 views
1

我正在通過Purescript示例教程,我有麻煩類型排隊使用左作爲這種摺疊匿名函數類型的問題左邊的摺疊是與Purescript

Cannot unify Prim.Function u13116 with Data.Maybe.Maybe 

我相信類型排隊,但我不能讓這個錯誤的正面或反面。

此外,是否有可能清理匿名函數的語法讓

foldl(\acc i -> smallerFile(acc i)) Just(x) xs 

變成類似:

foldl smallerFile Just(x) xs 

回答

4

在PureScript,比如Haskell,功能應用程序使用的空白,以及聯營左邊,這意味着f x y z解析爲((f x) y) z。條款需要重新組合時,您只需要括號。看起來你正在試圖爲函數應用使用圓括號。

我懷疑你想寫什麼是

foldl (\acc i -> smallerFile acc i) (Just x) xs 

的參數foldl是一個函數,它有兩個參數acci並返回應用smallerFile acc i。這相當於雙重申請(smallerFile acc) i。首先我們應用參數acc,然後應用第二個參數i。解析器中函數應用的優先規則使這些等價。

此外,被括號Just x需求,因爲你寫的解析爲

foldl (\acc i -> smallerFile (acc i)) Just x xs 

它提供了太多的參數foldl。您可以注意到\acc i -> smallerFile acc i相當於\acc -> (\i -> (smallerFile acc) i)。內部函數立即應用其參數i,所以我們可以將其簡化爲\acc -> smallerFile acc。應用這種簡化第二次,我們得到的只是smallerFile,所以代碼變成:

foldl smallerFile (Just x) xs 

所以最後唯一的錯誤是的Just x不正確的包圍。