Текстовые данные в Haskell - PullRequest
       0

Текстовые данные в Haskell

1 голос
/ 19 февраля 2020

Я действительно запутался с этими текстовыми данными в Haskell. Может кто-нибудь объяснить мне, какие значения он имеет, где его можно использовать и какова разница между ним и обычной строкой. Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 19 февраля 2020

A String - это список из Char s, он определяется как:

type String = [Char]

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

Тип данных Text хранит символы в виде фрагмента символов UTF-16. Таким образом, это означает, что нет никаких накладных расходов на память, и, кроме того, лучше с точки зрения кэширования, если символы расположены рядом друг с другом, поэтому обработка выполняется быстрее.

Если вы используете строгий Text (тот, который вы импортируете из Data.Text), тогда это означает, что текст должен поместиться в памяти. Data.Text.Lazy работает с патронами и, таким образом, лениво вычисляет следующий блок и, следовательно, может иногда работать со строками, которые не помещаются в памяти в целом.

2 голосов
/ 19 февраля 2020
  • Текст Непрерывная память, содержащая текст в кодировке UTF-16.
  • Строка Связанный список отдельных символов (неэффективно, но наличие списка позволяет легко и быстро создавать парсеры)
  • Ленивый текст from Data.Text.Lazy - это связанный список фрагментов Text, позволяющий осуществлять потоковую передачу текста в постоянной памяти.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...