packages feed

edits-0.1.0.0: src/Data/Text/Token.hs

-- | This module helps parsing some text with delimited differences
module Data.Text.Token where

import Protolude
import Data.Text qualified as T

-- | A Token is used to enclose a piece of text to compare and delimiters showing where the text is different from another piece of text
--   Start / End are markers for the beginning and end of that text
data Token
  = Kept Text
  | Delimiter Text
  | Start
  | End
  deriving (Eq, Show)

-- | Show a Token by skipping Start/End if present
showToken :: Token -> Text
showToken (Kept t) = t
showToken (Delimiter t) = t
showToken Start = ""
showToken End = ""

-- | Show a list of tokens. Start/End are skipped
showTokens :: [Token] -> Text
showTokens = T.concat . fmap showToken