找不到 Prelude.Functor 的实例

No instance found for Prelude.Functor

我正在阅读 "Purescript by Example" 本书,并且正在实施 the code in Chapter 5。但是我得到一个我不明白的编译错误。

我在这一行遇到编译错误(代码在没有这一行的情况下编译):

showPicture = map showShape

错误是:

No instance found for Prelude.Functor _67

error explanation 对我来说并没有说清楚。为什么会出现此错误?

我在我的 bower 文件中安装了这些依赖项:

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

您需要添加类型签名。

map 函数意味着您正在使用 Functor(在本例中为 Array)。所以你函数的一般类型是

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

您可能指的是更具体的类型

showPicture :: Picture -> Array String 

但是,psc 还不能推断约束,因此您需要一个类型签名来指导它。希望 psc 将在 1.0 版本之前推断约束,但目前,这是解决方法。