module Text.Authoring.Class where
import Control.Lens
import Control.Monad.RWS
import Control.Monad.State
import Control.Monad.Writer
import Data.Default (def)
import Text.Authoring.Document
import Text.Authoring.State
import Text.LaTeX (LaTeX)
import qualified Text.CSL.Input.Identifier.Internal as Citation
type MonadAuthoring s w m = (MonadState s m, HasAuthorState s, Citation.HasDatabase s, MonadWriter w m, HasDocument w, MonadIO m)
type AuthoringT = RWST () Document AuthorState
runAuthoringT :: Monad m => AuthoringT m a -> m (a, AuthorState, LaTeX)
runAuthoringT prog = do
(a,s,w) <- runRWST prog () def
return (a,s,w ^. latexSrc)