2015-09-07 28 views
1

我正在關注「Purescript by Example」書,並正在實施the code in Chapter 5。但是我收到一個我不明白的編譯錯誤。未找到Prelude.Functor的實例

我得到的編譯錯誤,在這條線(代碼編譯沒有這條線):

showPicture = map showShape 

的錯誤是:

No instance found for Prelude.Functor _67 

而且error explanation不說清楚我。爲什麼我會得到這個錯誤?

我有這些依賴安裝在我的涼亭文件:

"dependencies": { 
    "purescript-console": "^0.1.0" 
    "purescript-foldable-traversable": "~0.4.0", 
    "purescript-globals": "~0.2.0", 
    "purescript-math": "~0.2.0" 
} 
+0

你給了一個類型簽名? map函數意味着你正在使用Functor(在這個例子中是Array),但是psc還沒有推斷約束,所以你需要一個類型簽名來引導它。 –

+0

@菲爾:謝謝,那是失蹤的一塊。如果您將其添加爲答案,我會接受它。 – Jonas

回答

1

您需要添加一個類型簽名。

map函數意味着您正在使用Functor(在這種情況下爲Array)。所以,你的函數的一般類型是

showPicture :: forall f. (Functor f) => f Shape -> f String 

你可能意味着更具體的類型

showPicture :: Picture -> Array String 

然而,psc還不推斷的限制,所以你需要一個類型簽名引導它。 psc希望在1.0版本之前推斷約束,但現在,這是解決方法。