HaTeX-1.0.0: Text/LaTeX/Monad.hs
module Text.LaTeX.Monad (
-- * @LaTeX@ Monad
LaTeXM
, LaTeX
-- * Basic functions over @LaTeX@ Monad
, lx
, lxany
, lxw
, lxanyw
, nlx
, iolx
, reslx
-- * Generalizing
, genlx , ungenlx
) where
import Control.Monad.Writer
import Data.Monoid
import GHC.Exts
import System.IO.Unsafe
import Text.LaTeX.Result
----------------------------
type LaTeXM a = WriterT Result IO a
type LaTeX = LaTeXM ()
----------------------------
-- Running the Monad
nlx :: LaTeXM a -> IO Result
nlx = execWriterT
----------------------------
lx :: Result -> LaTeX
lx = tell
lxany :: Show a => a -> LaTeX
lxany = lx . toResult . show
lxw :: Result -> LaTeXM a
lxw x = do lx x
return undefined
lxanyw :: Show b => b -> LaTeXM a
lxanyw = lxw . toResult . show
iolx :: IO a -> LaTeXM a
iolx = liftIO
reslx :: (Result -> Result) -> (LaTeXM a -> LaTeXM a)
reslx = censor
instance IsString (LaTeXM a) where
fromString = lxw . toResult
instance Show (LaTeXM a) where
show = fromResult . unsafePerformIO . nlx
instance Eq (LaTeXM a) where
x == y = show x == show y
--
genlx :: LaTeX -> LaTeXM a
genlx = (>> return undefined)
ungenlx :: LaTeXM a -> LaTeX
ungenlx = (>> return ())