text-render-0.1.0.0: src/Text/Render.hs
{-# LANGUAGE OverloadedStrings #-}
module Text.Render (
Render(..),
renderTicks
) where
import qualified Prelude as P
import Prelude (($), (.), map, Int, Double, Functor(..), Show(..),
Eq(..), Bool, Integer, Double, Monad(..))
import Control.Monad.Trans (MonadIO(..))
import Data.Monoid
import Data.Text (Text)
import qualified Data.Text as T
import Text.Parsec (ParseError)
type Name = Text
-- | A class for pretty printing, and in general, for "showing" as a `Text`.
class Show a => Render a where
-- | Render the object as a `Text`.
render :: a -> Text
render = T.pack . P.show
-- | Many types of objects need to be rendered in parentheses.
renderParens :: a -> Text
renderParens = render
-- | Render in the `IO` monad. Useful for objects containing IORefs.
renderIO :: MonadIO m => a -> m Text
renderIO = return . render
instance Render Int
instance Render Bool
instance Render Integer
instance Render Double
instance Render Text
instance Render ParseError
instance (Render a, Render b) => Render (a, b) where
render (a, b) = "(" <> render a <> ", " <> render b <> ")"
instance Render a => Render [a] where
render list = "[" <> T.intercalate ", " (map render list) <> "]"
-- | Renders and surrounds in backticks. Useful for printing user input.
renderTicks :: Render a => a -> Text
renderTicks x = "`" <> render x <> "`"