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