Как я могу установить OverloadedStrings в записной книжке ihaskell?
Из примера ноутбука я понимаю, что я должен иметь возможность включать и отключать расширения следующим образом:
-- We can disable extensions.
:ext NoEmptyDataDecls
data Thing
<interactive>:1:1: error:
• ‘Thing’ has no constructors (EmptyDataDecls permits this)
• In the data declaration for ‘Thing’
-- And enable extensions.
:ext EmptyDataDecls
data Thing
Тем не менее, когда я пытаюсь сделать это с OverloadedStrings, я не вижу успеха. Ниже вы можете видеть, что T.lines ищет строку, а не текст. Зачем?
Что я неправильно понимаю или делаю неправильно?
1 ответ
Хорошая новость: в блокноте выше перегруженные строки загружены правильно. Проблема в том, что вам нужно прочитать файл с:
T.readFile
Так
main :: IO ()
main = do
text <- T.readFile "./data.txt"
print $ T.lines text
Это сбивало с толку, потому что ошибка выделена T.lines
скорее, чем readFile.
Оказывается readFile
не создает форму текстовых данных, которые автоматически преобразуются в формат, требуемый T.lines
(это производит String
не Text
). Вы должны были знать, что существует совершенно другая функция для вызова, которая делает это. Система типов не будет преобразовывать эти строковые форматы для вас. Вы должны сделать это самостоятельно, вызвав функцию чтения файла, которая явно возвращает Text
: Вот, T.readFile
,