Как я могу установить 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,

Другие вопросы по тегам