{-# LANGUAGE GeneralizedNewtypeDeriving #-} module Text.MPretty.Pretty where import Data.Maybe import Text.MPretty.StateSpace import Control.Monad.RWS import Data.Text.Lazy (Text) import Util.ConsoleState import Text.MPretty.MonadPretty newtype Pretty a = Pretty { unPretty :: RWST PrettyEnv Text PrettyState [] a } deriving ( Monad , MonadReader PrettyEnv , MonadWriter Text , MonadState PrettyState , MonadPlus ) runPretty :: Pretty a -> PrettyEnv -> PrettyState -> [(a,PrettyState,Text)] runPretty aM r s = runRWST (unPretty aM) r s execPretty :: Pretty () -> Text execPretty aM = let aM' = emitConsoleStateCodes >> group aM ((),_,t) = head $ runPretty aM' defaultPrettyEnv defaultPrettyState in t