В чем причина «Нет экземпляра для (Show (Int -> Int))», возникающего из-за ошибки «print» при попытке придать функции тип в Haskell? - PullRequest
3 голосов
/ 25 января 2020

Ошибка при записи этого:

definition x = x
definition :: Int -> Int

Ответы [ 2 ]

6 голосов
/ 25 января 2020

Сначала вы определили функцию definition x = x. Во второй строке у вас есть выражение definition :: Int -> Int. Но функция не является экземпляром Show, и, следовательно, интерпретатор не может напечатать функцию.

Похоже, однако, что ваша вторая строка - это подпись, которую вы хотите добавить в функцию. Вы можете использовать :{ и :} для написания многострочных операторов, например:

Prelude> <b>:{</b>
Prelude| definition :: Int -> Int
Prelude| definition x = x
Prelude| <b>:}</b>
6 голосов
/ 25 января 2020

Вы вводите свой код в GHCi, строка за строкой.

Первая строка определяет вашу функцию.

Вторая строка просит его напечатать, чего нельзя сделать.

Не пишите свой код построчно в GHCi. Запишите его в файл, а затем загрузите в GHCi.

...