packages feed

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