Попытка написать функцию Haskell для получения строкового параметра и добавления в файл - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь написать функцию, которая принимает строку в качестве входных данных и добавляет ее в файл.файл каждый раз один и тот же файл.функция компилируется правильно, но выдает ошибку

"Нет экземпляра для (Show (String -> IO ())), возникающего из-за использования` print '".

Код:

appendText :: String -> IO ()

appendText [] = return ()

appendText x = appendFile "testfile.txt" x 

Я понимаю, что проблема связана с типами и типом Show, но у меня возникают проблемы с пониманием проблемы и ее исправлением.Любая помощь будет отличной.

Редактировать: я вызываю ее как функцию, например appendFile "random text"

Ответы [ 2 ]

3 голосов
/ 20 апреля 2019

Вы пытались написать что-то вроде appendText или print appendText в GHCi?Если это так, он пытается Show функцию, что является ошибкой типа, поскольку у типов функций нет экземпляра Show.Вам нужно вызвать его с аргументом, являющимся конкретным String, который вы хотите добавить к testfile.txt:

appendText "test text"

Тип этого IO (), так что это действие, которое может бытьвыполняется, и после его запуска вы должны увидеть, как текст появляется в файле.

Ваша функция также может быть записана более просто:

appendText x = appendFile "testfile.txt" x

Или в форме без точек:

appendText = appendFile "testfile.txt"
0 голосов
/ 21 апреля 2019

Чтобы было понятно, удаление второй строки позволило функции работать:

appendText :: String -> IO ()

appendText = appendFile "testfile.txt"

Я не уверен, почему это решило проблему, эта строка была там для обработки ошибок, но, видимо, не нужна. Хотя работает, спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...