{-# LANGUAGE FlexibleContexts , FlexibleInstances , KindSignatures , MultiParamTypeClasses , UndecidableInstances #-} module Data.Markup.Class where import Data.Markup.Types import Control.Comonad -- | 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 Markup (m :: * -> *) where renderMarkup :: m a -> a toMarkup :: a -> m a instance (Monad m, Comonad m) => Markup m where renderMarkup = extract toMarkup = return