{-# LANGUAGE OverloadedStrings #-} module Render.Class ( Render (..), -- RenderTCM (..), renderM, renderP, renderA, renderATop, ) where import Agda.Syntax.Fixity (Precedence (TopCtx)) import qualified Agda.Syntax.Translation.AbstractToConcrete as Agda import qualified Agda.TypeChecking.Monad.Base as Agda import Agda.Utils.Pretty (Doc) import qualified Agda.Utils.Pretty as Doc import Data.Int (Int32) import Render.RichText -------------------------------------------------------------------------------- -- | Typeclass for rendering Inlines class Render a where render :: a -> Inlines renderPrec :: Int -> a -> Inlines render = renderPrec 0 renderPrec = const render -- | Rendering undersome context -- class RenderTCM a where -- renderTCM :: a -> Agda.TCM Inlines -- | Simply "pure . render" renderM :: (Applicative m, Render a) => a -> m Inlines renderM = pure . render -- | Render instances of Pretty renderP :: (Applicative m, Doc.Pretty a) => a -> m Inlines renderP = pure . text . Doc.render . Doc.pretty -- | like 'prettyA' renderA :: (Render c, Agda.ToConcrete a c) => a -> Agda.TCM Inlines renderA x = render <$> Agda.abstractToConcrete_ x -- | like 'prettyATop' renderATop :: (Render c, Agda.ToConcrete a c) => a -> Agda.TCM Inlines renderATop x = render <$> Agda.abstractToConcreteCtx TopCtx x -------------------------------------------------------------------------------- -- | Other instances of Render instance Render Int where render = text . show instance Render Int32 where render = text . show instance Render Integer where render = text . show instance Render Bool where render = text . show instance Render Doc where render = text . Doc.render instance Render a => Render [a] where render xs = "[" <> fsep (punctuate "," (map render xs)) <> "]"