<html><head><style>body {
        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
        padding:1em;
        margin:auto;
        background:#fefefe;
}

h1, h2, h3, h4, h5, h6 {
        font-weight: bold;
}

h1 {
        color: #000000;
        font-size: 28pt;
}

h2 {
        border-bottom: 1px solid #CCCCCC;
        color: #000000;
        font-size: 24px;
}

h3 {
        font-size: 18px;
}

h4 {
        font-size: 16px;
}

h5 {
        font-size: 14px;
}

h6 {
        color: #777777;
        background-color: inherit;
        font-size: 14px;
}

hr {
        height: 0.2em;
        border: 0;
        color: #CCCCCC;
        background-color: #CCCCCC;
}

p, blockquote, ul, ol, dl, li, table, pre {
        margin: 15px 0;
}

a, a:visited {
        color: #4183C4;
        background-color: inherit;
        text-decoration: none;
}

#message {
        border-radius: 6px;
        border: 1px solid #ccc;
        display:block;
        width:100%;
        height:60px;
        margin:6px 0px;
}

button, #ws {
        font-size: 12 pt;
        padding: 4px 6px;
        border-radius: 5px;
        border: 1px solid #bbb;
        background-color: #eee;
}

code, pre, #ws, #message {
        font-family: Monaco;
        font-size: 10pt;
        border-radius: 3px;
        background-color: #F8F8F8;
        color: inherit;
}

code {
        border: 1px solid #EAEAEA;
        margin: 0 2px;
        padding: 0 5px;
}

pre {
        border: 1px solid #CCCCCC;
        overflow: auto;
        padding: 4px 8px;
}

pre > code {
        border: 0;
        margin: 0;
        padding: 0;
}

#ws { background-color: #f8f8f8; }

.send { color:#77bb77; }
.server { color:#7799bb; }
.error { color:#AA0000; }</style></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><p>Hey everyone!</p>

<p>I'm excited to announce a significant update to <a href="https://github.com/gibiansky/IHaskell">IHaskell</a>. I originally <a href="https://groups.google.com/forum/#!searchin/haskell-cafe/ihaskell/haskell-cafe/iUipQsubn58/VkKr0b-re1kJ">announced IHaskell</a> a few months ago, but there's been a few exciting changes: </p>

<ol>
<li>Significantly more stable and less buggy. It's been updated to use the GHC API for parsing and evaluation, so behavior should be very similar to GHCi in most places. </li>
<li>You can now defined modules in cells instead of just interactive code. These modules are compiled to object code and loaded and provide fast runtime compared to interactive code. </li>
<li><strong>Most important:</strong> IHaskell can now load additional packages in order to provide rich display capabilities for specific data types. This means that it can be augmented through separate packages. If you have interest in providing a rich display mechanism for a data type, please consider writing an IHaskell extension package to do so! (If there are any data types that you think would be particularly useful but don't have time to implement yourself, let me know, too!) </li>
</ol>

<p>The extensibility is provided through an IHaskell.Display module. For instance, if you are creating an extension for a particular package <code>foo</code>, you should create a package called <code>ihaskell-foo</code>. This package should contain a module along the following lines: </p>

<pre><code>-- The name is important  
module IHaskell.Display.Foo where

import Foo (DataThing)  
import IHaskell.Display

-- Define how to display my data thing  
instance IHaskellDisplay DataThing where
  display myDataThing =  
      [ plain "Plain Text output"
      , html "<b>HTML output</b>"]
</code></pre>

<p>I would love to work with anyone who's interested in helping create these packages to make IHaskell as useful as possible. In addition, if you have any features you think would really make this more useful or bugs you've found, let me know!</p>

<p>If you have any issues with installation, please let me know. I've had some trouble with getting a Hackage-based installation to work, so for now it's just from the Github repository, but I'd be happy to help people individually.</p></body></html>