HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Moduletext-rope-0.2Haskell2010

Data.Text.Lines

  • 2 types
  • 11 values
  • Packagetext-rope-0.2
  • Exports13
  • LanguageHaskell2010
  • LicenceBSD-3-Clause
  • SourceInternal.hs
datadata TextLines
#

A wrapper around Text for fast line/column navigation. Concatenation takes linear time.

This is a building block for Rope, which provides logarithmic concatenation.

Instances7Eq, Ord, Show, IsString, Semigroup, Monoid, …

Lines

3 declarations
valuelines :: TextLines -> [Text]
#

Split into lines by \n, similar to Data.Text.lines. Each line is produced in O(1).

Example6 expressions
:set -XOverloadedStringslines ""[]lines "foo"["foo"]lines "foo\n"["foo"]lines "foo\n\n"["foo",""]lines "foo\nbar"["foo","bar"]
valuelengthInLines :: TextLines -> Word
#

Equivalent to Data.List.length . lines, but in O(1).

Example6 expressions
:set -XOverloadedStringslengthInLines ""0lengthInLines "foo"1lengthInLines "foo\n"1lengthInLines "foo\n\n"2lengthInLines "foo\nbar"2

Split at given line, O(1).

Example2 expressions
:set -XOverloadedStringsmap (\l -> splitAtLine l "foo\nbar") [0..3][("","foo\nbar"),("foo\n","bar"),("foo\nbar",""),("foo\nbar","")]

Code points

6 declarations
valuelength :: TextLines -> Word
#

Length in code points, similar to Data.Text.length. Takes linear time.

Example3 expressions
:set -XOverloadedStringslength "fя𐀀"3Data.Text.Utf16.Lines.length "fя𐀀"4
valuesplitAt :: Word -> TextLines -> (TextLines, TextLines)
#

Split at given code point, similar to Data.Text.splitAt. Takes linear time.

Example2 expressions
:set -XOverloadedStringsmap (\c -> splitAt c "fя𐀀") [0..4][("","fя𐀀"),("f","я𐀀"),("fя","𐀀"),("fя𐀀",""),("fя𐀀","")]
datadata Position
#

Represent a position in a text.

Constructors

Instances6Eq, Ord, Show, Semigroup, Monoid, NFData
  • Eq PositionDefined in text-rope-0.2 · Data.Text.Lines.Internal
  • Ord PositionDefined in text-rope-0.2 · Data.Text.Lines.Internal
  • Show PositionDefined in text-rope-0.2 · Data.Text.Lines.Internal
  • Semigroup PositionDefined in text-rope-0.2 · Data.Text.Lines.Internal

    Associativity does not hold when posLine overflows.

  • Monoid PositionDefined in text-rope-0.2 · Data.Text.Lines.Internal
  • NFData PositionDefined in text-rope-0.2 · Data.Text.Lines.Internal

Measure text length as an amount of lines and columns. Time is proportional to the length of the last line.

Example4 expressions
:set -XOverloadedStringslengthAsPosition "f𐀀"Position {posLine = 0, posColumn = 2}lengthAsPosition "f\n𐀀"Position {posLine = 1, posColumn = 1}lengthAsPosition "f\n𐀀\n"Position {posLine = 2, posColumn = 0}

Combination of splitAtLine and subsequent splitAt. Time is linear in posColumn, but does not depend on posLine.

Example7 expressions
:set -XOverloadedStringssplitAtPosition (Position 1 0) "f\n𐀀я"("f\n","𐀀я")splitAtPosition (Position 1 1) "f\n𐀀я"("f\n𐀀","я")splitAtPosition (Position 1 2) "f\n𐀀я"("f\n𐀀я","")splitAtPosition (Position 0 2) "f\n𐀀я"("f\n","𐀀я")splitAtPosition (Position 0 3) "f\n𐀀я"("f\n𐀀","я")splitAtPosition (Position 0 4) "f\n𐀀я"("f\n𐀀я","")