module Data.Markup.Types where
import Data.Url
import Data.Functor.Identity
import Control.Applicative
import Control.Monad.Trans.Control
import Control.Monad.Trans.Resource
import Control.Monad
import Control.Monad.Reader
import Control.Monad.Writer
import Control.Monad.State
import Control.Monad.RWS
import Control.Monad.Except
import Control.Monad.Cont
import Control.Monad.Base
import Control.Monad.Catch
import Control.Monad.Morph
import Control.Comonad
newtype InlineMarkupT m a = InlineMarkupT
{ runInlineMarkupT :: m a
} deriving (Monoid, Functor, Applicative, Alternative, Monad, MonadIO, MonadFix
, MonadPlus, MonadReader r, MonadState s, MonadWriter w, MonadRWS r w s
, MonadError e, MonadThrow, MonadCatch, MonadMask, MonadCont, MonadBase b)
type InlineMarkup = InlineMarkupT Identity
instance ( MonadUrl b m
, MonadThrow m
) => MonadUrl b (InlineMarkupT m) where
pathUrl = lift . pathUrl
locUrl = lift . locUrl
symbolUrl = symbolUrl
instance MFunctor InlineMarkupT where
hoist f (InlineMarkupT x) = InlineMarkupT (f x)
instance MMonad InlineMarkupT where
embed f (InlineMarkupT x) = f x
instance MonadTransControl InlineMarkupT where
type StT InlineMarkupT a = a
liftWith f = InlineMarkupT (f runInlineMarkupT)
restoreT = InlineMarkupT
instance ( MonadBaseControl b m
) => MonadBaseControl b (InlineMarkupT m) where
type StM (InlineMarkupT m) a = ComposeSt InlineMarkupT m a
liftBaseWith = defaultLiftBaseWith
restoreM = defaultRestoreM
instance ( Comonad m
, Monad m
) => Comonad (InlineMarkupT m) where
extract = extract . runInlineMarkupT
duplicate = InlineMarkupT . return
instance MonadTrans InlineMarkupT where
lift = InlineMarkupT
newtype HostedMarkupT m a = HostedMarkupT
{ runHostedMarkupT :: m a
} deriving (Monoid, Functor, Applicative, Alternative, Monad, MonadIO, MonadFix
, MonadPlus, MonadReader r, MonadState s, MonadWriter w, MonadRWS r w s
, MonadError e, MonadThrow, MonadCatch, MonadMask, MonadCont, MonadBase b)
type HostedMarkup = HostedMarkupT Identity
instance ( MonadUrl b m
, MonadThrow m
) => MonadUrl b (HostedMarkupT m) where
pathUrl = lift . pathUrl
locUrl = lift . locUrl
symbolUrl = symbolUrl
instance MFunctor HostedMarkupT where
hoist f (HostedMarkupT x) = HostedMarkupT (f x)
instance MMonad HostedMarkupT where
embed f (HostedMarkupT x) = f x
instance MonadTransControl HostedMarkupT where
type StT HostedMarkupT a = a
liftWith f = HostedMarkupT (f runHostedMarkupT)
restoreT = HostedMarkupT
instance ( MonadBaseControl b m
) => MonadBaseControl b (HostedMarkupT m) where
type StM (HostedMarkupT m) a = ComposeSt HostedMarkupT m a
liftBaseWith = defaultLiftBaseWith
restoreM = defaultRestoreM
instance ( Comonad m
, Monad m
) => Comonad (HostedMarkupT m) where
extract = extract . runHostedMarkupT
duplicate = HostedMarkupT . return
instance MonadTrans HostedMarkupT where
lift = HostedMarkupT
newtype LocalMarkupT m a = LocalMarkupT
{ runLocalMarkupT :: m a
} deriving (Monoid, Functor, Applicative, Alternative, Monad, MonadIO, MonadFix
, MonadPlus, MonadReader r, MonadState s, MonadWriter w, MonadRWS r w s
, MonadError e, MonadThrow, MonadCatch, MonadMask, MonadCont, MonadBase b)
type LocalMarkup = LocalMarkupT Identity
instance ( MonadUrl b m
, MonadThrow m
) => MonadUrl b (LocalMarkupT m) where
pathUrl = lift . pathUrl
locUrl = lift . locUrl
symbolUrl = symbolUrl
instance MFunctor LocalMarkupT where
hoist f (LocalMarkupT x) = LocalMarkupT (f x)
instance MMonad LocalMarkupT where
embed f (LocalMarkupT x) = f x
instance MonadTransControl LocalMarkupT where
type StT LocalMarkupT a = a
liftWith f = LocalMarkupT (f runLocalMarkupT)
restoreT = LocalMarkupT
instance ( MonadBaseControl b m
) => MonadBaseControl b (LocalMarkupT m) where
type StM (LocalMarkupT m) a = ComposeSt LocalMarkupT m a
liftBaseWith = defaultLiftBaseWith
restoreM = defaultRestoreM
instance ( Comonad m
, Monad m
) => Comonad (LocalMarkupT m) where
extract = extract . runLocalMarkupT
duplicate = LocalMarkupT . return
instance MonadTrans LocalMarkupT where
lift = LocalMarkupT