{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE AllowAmbiguousTypes #-} module Data.Markup.Class where import Data.Markup.Types import Lucid import Data.Monoid import qualified Data.Text as T import Data.Functor.Identity -- | Overload assets and their markup library, over some deployment class Deploy symbol input markup (m :: * -> *) where deploy :: symbol -> input -> m markup -- | Overload extraction of (co)monad class Monad m => Markup (m :: * -> *) where renderMarkup :: m a -> a toMarkup :: a -> m a instance Markup InlineMarkupM where renderMarkup = runInlineMarkupM toMarkup = InlineMarkupM instance Markup HostedMarkupM where renderMarkup = runHostedMarkupM toMarkup = HostedMarkupM instance Markup LocalMarkupM where renderMarkup = runLocalMarkupM toMarkup = LocalMarkupM