ihaskell-0.2.0.2: IHaskell/Display.hs
{-# LANGUAGE NoImplicitPrelude, OverloadedStrings #-}
{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
module IHaskell.Display (
IHaskellDisplay(..),
plain, html, png, jpg, svg, latex,
serializeDisplay
) where
import ClassyPrelude
import Data.Serialize as Serialize
import Data.ByteString
import Data.String.Utils (rstrip)
import IHaskell.Types
-- | A class for displayable Haskell types.
class IHaskellDisplay a where
display :: a -> [DisplayData]
-- | Generate a plain text display.
plain :: String -> DisplayData
plain = Display PlainText . rstrip
-- | Generate an HTML display.
html :: String -> DisplayData
html = Display MimeHtml
png :: String -> DisplayData
png = Display MimePng
jpg :: String -> DisplayData
jpg = Display MimeJpg
svg :: String -> DisplayData
svg = Display MimeSvg
latex :: String -> DisplayData
latex = Display MimeLatex
serializeDisplay :: [DisplayData] -> ByteString
serializeDisplay = Serialize.encode