{-# LANGUAGE GeneralizedNewtypeDeriving, TypeFamilies,TypeSynonymInstances,FlexibleInstances, PackageImports, DeriveFunctor #-} 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