2015-09-07 3 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

Вы даете подпись типа? Функция карты означает, что вы используете Functor (в данном случае Array), но psc еще не выдает ограничений, поэтому вам нужна сигнатура типа для ее руководства. –

+0

@Phil: Спасибо, это был недостающий кусок. Если вы добавите его в качестве ответа, я соглашусь с ним. – Jonas

ответ

1

Вы должны добавить подпись типа.

Функция map подразумевает, что вы используете Functor (в данном случае Array). Таким образом, общий тип вашей функции

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

вероятно Вы имели в виду тем более конкретный тип

showPicture :: Picture -> Array String 

Однако psc еще не вывод ограничений, так что вам нужен тип подписи, чтобы направлять его. Надеемся, что psc будет устанавливать ограничения до выпуска 1.0, но пока это обходное решение.

Смежные вопросы