module Text.LaTeX.Base.Class (
LaTeXC (..)
, Monoid (..)
, fromLaTeX
, liftL
, liftL2
, comm0
, commS
, braces
) where
import Text.LaTeX.Base.Syntax
import Data.Text (Text)
import Data.Monoid
import Data.String
class (Monoid l,IsString l) => LaTeXC l where
liftListL :: ([LaTeX] -> LaTeX) -> [l] -> l
instance LaTeXC LaTeX where
liftListL = id
fromLaTeX :: LaTeXC l => LaTeX -> l
fromLaTeX l = liftListL (\_ -> l) []
liftL :: LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL f x = liftListL (\[x] -> f x) [x]
liftL2 :: LaTeXC l => (LaTeX -> LaTeX -> LaTeX) -> l -> l -> l
liftL2 f x y = liftListL (\[x,y] -> f x y) [x,y]
comm0 :: LaTeXC l => String -> l
comm0 str = fromLaTeX $ TeXComm str []
commS :: LaTeXC l => String -> l
commS = fromLaTeX . TeXCommS
braces :: LaTeXC l => l -> l
braces = liftL TeXBraces