{-# LANGUAGE FlexibleContexts , FlexibleInstances , KindSignatures , MultiParamTypeClasses , UndecidableInstances #-} module Data.Markup.Class where 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