module ASCII.TemplateHaskell (
charExp, charPat,
charListExp, charListPat,
isCharExp, isCharPat,
isStringExp, isStringPat
) where
import qualified ASCII.Char as ASCII
import qualified ASCII.Superset as S
import Data.Data ( Data )
import Data.Maybe ( Maybe (..) )
import Language.Haskell.TH.Syntax ( Q, Exp, Pat, dataToExpQ, dataToPatQ )
exp :: Data a => a -> Q Exp
exp :: a -> Q Exp
exp = (forall b. Data b => b -> Maybe (Q Exp)) -> a -> Q Exp
forall a.
Data a =>
(forall b. Data b => b -> Maybe (Q Exp)) -> a -> Q Exp
dataToExpQ (\b
_ -> Maybe (Q Exp)
forall a. Maybe a
Nothing)
pat :: Data a => a -> Q Pat
pat :: a -> Q Pat
pat = (forall b. Data b => b -> Maybe (Q Pat)) -> a -> Q Pat
forall a.
Data a =>
(forall b. Data b => b -> Maybe (Q Pat)) -> a -> Q Pat
dataToPatQ (\b
_ -> Maybe (Q Pat)
forall a. Maybe a
Nothing)
charExp :: ASCII.Char -> Q Exp
charExp :: Char -> Q Exp
charExp = Char -> Q Exp
forall a. Data a => a -> Q Exp
exp
charPat :: ASCII.Char -> Q Pat
charPat :: Char -> Q Pat
charPat = Char -> Q Pat
forall a. Data a => a -> Q Pat
pat
charListExp :: [ASCII.Char] -> Q Exp
charListExp :: [Char] -> Q Exp
charListExp = [Char] -> Q Exp
forall a. Data a => a -> Q Exp
exp
charListPat :: [ASCII.Char] -> Q Pat
charListPat :: [Char] -> Q Pat
charListPat = [Char] -> Q Pat
forall a. Data a => a -> Q Pat
pat
isCharExp :: ASCII.Char -> Q Exp
isCharExp :: Char -> Q Exp
isCharExp Char
x = [| S.fromChar $(charExp x) |]
isCharPat :: ASCII.Char -> Q Pat
isCharPat :: Char -> Q Pat
isCharPat Char
x = [p| (S.toCharMaybe -> Just $(charPat x)) |]
isStringExp :: [ASCII.Char] -> Q Exp
isStringExp :: [Char] -> Q Exp
isStringExp [Char]
xs = [| S.fromCharList $(charListExp xs) |]
isStringPat :: [ASCII.Char] -> Q Pat
isStringPat :: [Char] -> Q Pat
isStringPat [Char]
xs = [p| (S.toCharListMaybe -> Just $(charListPat xs)) |]