module MarXup.Verbatim where
import MarXup
import Control.Monad.Fix
import Control.Monad (ap)
import Control.Applicative
data Verbatim a = Verbatim {fromVerbatim::String, value::a}
deriving Functor
instance Textual Verbatim where
textual s = Verbatim s ()
instance Applicative Verbatim where
pure = return
(<*>) = ap
instance Monad Verbatim where
return x = Verbatim "" x
(Verbatim s0 x) >>= f =
Verbatim (s0 ++ s1) y
where Verbatim s1 y = f x
instance MonadFix Verbatim where
mfix f = let Verbatim _ x = f x in f x