module Data.Text.ParagraphLayout.Internal.LineNumbers ( LineNumbers , lineNumbers , lineNumbersWithDuplication ) where import qualified Data.List.NonEmpty as NonEmpty -- | Data types that contain numbered lines. class LineNumbers ml where -- | A list of all line numbers in ascending order, -- with possible duplicates. lineNumbersWithDuplication :: ml -> [Int] -- | A list of all unique line numbers, in ascending order. lineNumbers :: (LineNumbers ml) => ml -> [Int] lineNumbers ml = dedupe $ lineNumbersWithDuplication ml -- | Remove duplicates from a sorted list. dedupe :: Eq a => [a] -> [a] dedupe xs = map NonEmpty.head $ NonEmpty.group xs