tlex-encoding-0.1.0.0: src/Language/Lexer/Tlex/Plugin/Encoding/CharSetP.hs
module Language.Lexer.Tlex.Plugin.Encoding.CharSetP (
Pattern,
CharSetStdP,
CharSetP (..),
charSetP,
charSetPWithWarnings,
chP,
charsP,
stringP,
EncodeWarning (..),
CharSetEncoder (..),
) where
import Language.Lexer.Tlex.Prelude
import qualified Data.CharSet as CharSet
import qualified Data.String as String
import qualified Language.Lexer.Tlex.Data.Reporter as Reporter
import qualified Language.Lexer.Tlex.Syntax as Tlex
type Pattern = Tlex.Pattern Word8
type CharSetStdP = CharSetP Identity
newtype CharSetP m = CharSetP
{ charSetEncodingP :: CharSet.CharSet -> m Pattern
}
data EncodeWarning
= NotSupportedChar Char
| CustomWarning String.String
deriving (Eq, Show)
charSetP :: CharSetStdP -> CharSet.CharSet -> Pattern
charSetP p cs = runIdentity do charSetEncodingP p cs
charSetPWithWarnings :: CharSetEncoder m => CharSetP m -> CharSet.CharSet -> m Pattern
charSetPWithWarnings p cs = charSetEncodingP p cs
chP :: CharSetStdP -> Char -> Pattern
chP p c = charSetP p do CharSet.singleton c
charsP :: CharSetStdP -> [Char] -> Pattern
charsP p cs = charSetP p do CharSet.fromList cs
stringP :: CharSetStdP -> String.String -> Pattern
stringP p s = foldMap
do chP p
do s
class Monad m => CharSetEncoder m where
reportEncodeWarning :: EncodeWarning -> m ()
instance CharSetEncoder Identity where
reportEncodeWarning _ = pure ()
instance CharSetEncoder (Either EncodeWarning) where
reportEncodeWarning e = Left e
instance CharSetEncoder (Reporter.Reporter EncodeWarning) where
reportEncodeWarning e = Reporter.report e