ihaskell-0.9.0.3: A Haskell backend kernel for the IPython project.

Safe HaskellNone
LanguageHaskell2010

IHaskell.Display

Contents

Description

If you are interested in the IHaskell library for the purpose of augmenting the IHaskell notebook or writing your own display mechanisms and widgets, this module contains all functions you need.

In order to create a display mechanism for a particular data type, write a module named (for example) IHaskell.Display.YourThing in a package named ihaskell-yourThing. (Note the capitalization - it's important!) Then, in that module, add an instance of IHaskellDisplay for your data type. Similarly, to create a widget, add an instance of IHaskellWidget.

An example of creating a display is provided in the demo notebook.

Synopsis

Rich display and interactive display typeclasses and types

class IHaskellDisplay a where #

A class for displayable Haskell types.

IHaskell's displaying of results behaves as if these two overlapping/undecidable instances also existed:

instance (Show a) => IHaskellDisplay a
instance Show a where shows _ = id

Minimal complete definition

display

Methods

display :: a -> IO Display #

Instances

data Display #

Wrapper for ipython-kernel's DisplayData which allows sending multiple results from the same expression.

data DisplayData :: * #

Data for display: a string with associated MIME type.

Constructors

DisplayData MimeType Text 

class IHaskellDisplay a => IHaskellWidget a where #

Display as an interactive widget.

Minimal complete definition

getCommUUID

Methods

targetName :: a -> String #

Target name for this widget. The actual input parameter should be ignored. By default evaluate to "jupyter.widget", which is used by IPython for its backbone widgets.

targetModule :: a -> String #

Target module for this widget. Evaluates to an empty string by default.

getCommUUID :: a -> UUID #

Get the uuid for comm associated with this widget. The widget is responsible for storing the UUID during initialization.

open #

Arguments

:: a

Widget to open a comm port with.

-> (Value -> IO ())

A function for sending messages.

-> IO () 

Called when the comm is opened. Allows additional messages to be sent after comm open.

comm #

Arguments

:: a

Widget which is being communicated with.

-> Value

Data recieved from the frontend.

-> (Value -> IO ())

Way to respond to the message.

-> IO () 

Respond to a comm data message. Called when a message is recieved on the comm associated with the widget.

close #

Arguments

:: a

Widget to close comm port with.

-> Value

Data recieved from the frontend.

-> IO () 

Called when a comm_close is recieved from the frontend.

Instances

IHaskellWidget Widget # 

Methods

targetName :: Widget -> String #

targetModule :: Widget -> String #

getCommUUID :: Widget -> UUID #

open :: Widget -> (Value -> IO ()) -> IO () #

comm :: Widget -> Value -> (Value -> IO ()) -> IO () #

close :: Widget -> Value -> IO () #

Interactive use functions

printDisplay :: IHaskellDisplay a => a -> IO () #

Write to the display channel. The contents will be displayed in the notebook once the current execution call ends.

Constructors for displays

plain :: String -> DisplayData #

Generate a plain text display.

html :: String -> DisplayData #

Generate an HTML display.

png :: Width -> Height -> Base64 -> DisplayData #

Generate a PNG display of the given width and height. Data must be provided in a Base64 encoded manner, suitable for embedding into HTML. The base64 function may be used to encode data into this format.

jpg :: Width -> Height -> Base64 -> DisplayData #

Generate a JPG display of the given width and height. Data must be provided in a Base64 encoded manner, suitable for embedding into HTML. The base64 function may be used to encode data into this format.

svg :: String -> DisplayData #

Generate an SVG display.

latex :: String -> DisplayData #

Generate a LaTeX display.

javascript :: String -> DisplayData #

Generate a Javascript display.

many :: [Display] -> Display #

Encode many displays into a single one. All will be output.

Image and data encoding functions

type Width = Int #

Possible MIME types for the display data.

type Height = Int #

type Base64 = Text #

encode64 :: String -> Base64 #

Convert from a string into base 64 encoded data.

base64 :: ByteString -> Base64 #

Convert from a ByteString into base 64 encoded data.

Utilities

switchToTmpDir :: IO () #

Convenience function for client libraries. Switch to a temporary directory so that any files we create aren't visible. On Unix, this is usually /tmp.

Internal only use

displayFromChanEncoded :: IO ByteString #

Take everything that was put into the displayChan at that point out, and make a Display out of it.

serializeDisplay :: Display -> ByteString #

For internal use within IHaskell. Serialize displays to a ByteString.

data Widget #

Constructors

IHaskellWidget a => Widget a 

Instances

Orphan instances

IHaskellDisplay DisplayData # 
IHaskellDisplay Display # 

Methods

display :: Display -> IO Display #

IHaskellDisplay a => IHaskellDisplay [a] # 

Methods

display :: [a] -> IO Display #

IHaskellDisplay a => IHaskellDisplay (IO a) #

these instances cause the image, html etc. which look like:

Display
[Display]
IO [Display]
IO (IO Display)

be run the IO and get rendered (if the frontend allows it) in the pretty form.

Methods

display :: IO a -> IO Display #