Commit 4f92c0b3 authored by Andrew Gibiansky's avatar Andrew Gibiansky

many updates to demo nb

parent dbb5b393
......@@ -311,7 +311,14 @@
"source": [
"If you're looking at this notebook after it's been exported to HTML, you won't be able to see this interactive pane. However, it looks approximately like this:\n",
"\n",
"![IPython pager info](https://raw2.github.com/gibiansky/IHaskell/master/images/ihaskell-logo.png)"
"![IPython pager info](https://raw2.github.com/gibiansky/IHaskell/master/images/info-demo.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now write slightly more complicated scripts."
]
},
{
......@@ -324,7 +331,7 @@
"\n",
"forM_ [1..5] $ \\x -> do\n",
" print x\n",
" threadDelay $ 100 * 1000"
" threadDelay $ 200 * 1000"
],
"language": "python",
"metadata": {},
......@@ -341,7 +348,110 @@
]
}
],
"prompt_number": 10
"prompt_number": 13
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is where the similarities with GHCi end, and the particularly shiny features of IHaskell begin.\n",
"\n",
"Although looking at text outputs is often enough, there are many times where we really want a richer output. Suppose we have a custom data type for color:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"data Color = Red | Green | Blue"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we were playing around with designing GUI applications for color-blind users, we might want to actually *see* these colors, instead of just seeing the text \"Red\", \"Green\", and \"Blue\" when we are debugging.\n",
"\n",
"IHaskell lets you define a custom display mechanism for any data type via its `IHaskellDisplay` typeclass. Since you can use IHaskell in console mode as well as notebook mode, you can provide a list of display outputs for any data type, and the frontend will simply choose the best one. Here's how you would implement a very simple display mechanism for this `Color` data type:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import IHaskell.Display\n",
"\n",
"instance IHaskellDisplay Color where\n",
" display color = return [html code]\n",
" where\n",
" code = concat [\"<div style='font-weight: bold; color:\"\n",
" , css color\n",
" , \"'>Look!</div>\"]\n",
" css Red = \"red\"\n",
" css Blue = \"blue\"\n",
" css Green = \"green\""
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 16
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Once we define a custom `display :: a -> IO [DisplayData]` function, we can simply output a `Color`:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"Red\n",
"Green\n",
"Blue"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style='font-weight: bold; color:red'>Look!</div>"
],
"metadata": {},
"output_type": "display_data"
},
{
"html": [
"<div style='font-weight: bold; color:green'>Look!</div>"
],
"metadata": {},
"output_type": "display_data"
},
{
"html": [
"<div style='font-weight: bold; color:blue'>Look!</div>"
],
"metadata": {},
"output_type": "display_data"
}
],
"prompt_number": 17
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `DisplayData` type has several constructors which let you display your data as plain text, HTML, images (SVG, PNG, JPG), or even as LaTeX code.\n",
"\n",
"In order to ship an extension for IHaskell, simply create a package named `ihaskell-thing` with a module named `IHaskell.Display.Thing`. As long as `ihaskell-thing` is installed, IHaskell will detect and use it automatically.\n",
"\n",
"A number of packages already exist, which we can briefly look at. First, in `ihaskell-basic`, we have very simple displays for data types from `Prelude`."
]
},
{
"cell_type": "code",
......@@ -397,7 +507,14 @@
]
}
],
"prompt_number": 11
"prompt_number": 18
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `ihaskell-aeson` package adds a display for [Aeson](http://hackage.haskell.org/package/aeson) JSON `Value` types. These are automatically syntax highlighted and formatted nicely."
]
},
{
"cell_type": "code",
......@@ -456,7 +573,14 @@
]
}
],
"prompt_number": 12
"prompt_number": 19
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `ihaskell-blaze` package lets you play around with HTML straight from within IHaskell using the [Blaze](http://jaspervdj.be/blaze/tutorial.html) library."
]
},
{
"cell_type": "code",
......@@ -521,7 +645,14 @@
]
}
],
"prompt_number": 13
"prompt_number": 21
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `ihaskell-diagrams` package allows you to experiment with the [diagrams](http://projects.haskell.org/diagrams/) package. It requires the Cairo backend."
]
},
{
"cell_type": "code",
......@@ -590,7 +721,14 @@
]
}
],
"prompt_number": 14
"prompt_number": 22
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Just like with Diagrams, `ihaskell-chart` allows you to use the [Chart](https://github.com/timbod7/haskell-chart/wiki) library for plotting from within IHaskell."
]
},
{
"cell_type": "code",
......@@ -833,7 +971,83 @@
]
}
],
"prompt_number": 15
"prompt_number": 23
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"By default, both `ihaskell-diagrams` and `ihaskell-chart` use SVG displays. However, the notebook does not support interactive resizing for SVG image. However, if you use `:set no-svg`, all SVG outputs will instead be shown as PNG images, and they can be resized easily."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
":set no-svg\n",
"\n",
"toRenderable \n",
" $ pie_title .~ \"Relative Population\"\n",
" $ pie_plot . pie_data .~ map pitem values\n",
" $ def"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAAEsCAIAAADfNCTgAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deVwU9f8H8NeyyyGg6CooivKTwyNSzLJUMLxQUVHDAxME0RTvAzUjNbW8K0tDLSVTv3lh5hHeiuaJeJUBWoIcCggoisACC+z8/pgigl1YmN2dneX9fPSH7nzmM+81fDnHZz4fEcMwIIQQUldGfBdACCHCRjFKCCGcUIwSQggnFKOEEMIJxSghhHAi4bsAohX+/v5//vln+W+NjY2dnJxGjRo1bNiwGvft3r17WVnZiRMnrK2tVbXJyMiQyWQtWrSwsLAA4OzszDDMpUuXWrZsqdnKbWxsevbsOWfOHEtLS449q8Lv9yWGgCGG6I033lD6v3vHjh017iuRSACkpaVV06Z///4AIiIi2N+ynaekpGipcjc3N4VCwb1zpfj9vsQA0EW9Ifvoo4+uX79+/fr1w4cPOzk5AVi3bp02DnTr1q1bt261aNFCUx3OnTv3+vXrUVFR06ZNA3D16tXLly9rqnPuNP59ibDxneNEK9hzum3btpV/sn37dgAmJibsad2LFy+mT5/evn17e3t7Hx+f+/fvl7eseHaWnJw8duzY9u3bt2vXzt/f//DhwwzDzJw5k73+ffvttzdt2sQwTO/evT08PJ4+ffrJJ594eHh89tlnbFfx8fEeHh4DBgwoLi6u/qCVKv/666/Z35aVlbFp9d133zEMU1pa+tlnn3Xu3NnCwqJDhw7z5s2TyWRszx4eHsOHD//11199fHwcHR39/PzKTzDZrR4eHgUFBewn5QVz/L7VlMQW369fv379+kVHR/v4+Dg5OQUHB9+5c0cT/4eJHqEYNUxVYzQgIACAm5sbwzAlJSWdO3cG0LRpU2dnZwBNmjSJjY1lW1aMFQcHBwBt27Z1c3MzMjISiUTXrl3z9/dv3LgxgI4dO65evZqpcJG7b98+AC1btmS7WrVqFYBRo0bVeNBKlZfHaG5uboMGDQDs2bOHYRg/Pz/2WJ07dzYyMgLg7u6uUCiysrIAmJqampubS6VStk3btm0LCwsZhmG3Anj16hXbrUgkApCcnMzx+1ZTEsMwZWVl7KamTZu+/vrrYrEYQPPmzdl/VIjBoBg1TGwY2djYODs7Ozs7syng4uLy8OFDhmF2794NoH379kVFRQzDBAUFAZgyZQq7b3msJCYm9u7d28/Pj/28R48eAL766itG9b1CmUzWqFEjAOw5F7vLL7/8UuNBK1Xu7u4+ffr0iRMn2tvbs/mYmJh4584d9kA3btxgGObhw4dswh4+fLg8KNnyLly4wJYRHh7OqB2jdfi+1ZTEVIjRb775hmGY2NhY9rfx8fEa/v9NeEX3Rg1ZWVmZXC4vKirKzc0FIJfL2b/Yv/32GwCFQhEQEODr68s+GY+Kiqq0u4ODw969ez08PPz9/bt06XL9+nW2k2qO2KBBgzFjxgA4ceJEdnb2jRs3bGxsBg0apP5BWVeuXNmyZcuOHTtSUlJsbW1/+OEHBwcHtoBOnTq9/fbbAJycnDw8PABcu3aN3UskEgUHBwPo3bt3nz59AMTFxan/x1WH71tjSSxvb28ALi4u7L9n+fn56ldF9B8NeDJka9asmTx5MoCcnBw3N7cHDx5s27btyy+/ZP8ai8VihUIBoGXLlqNGjSq/Fi6XmJjYo0eP7OxsNze3IUOGNG3aVFXqVRQQEBAeHn78+HE7OzuFQuHn58ee7ql5UNa8efN8fX2NjIxsbGzs7OzYy2GZTAaATSIW+2v2cwDm5ubsySAAKysrAOyxyjEMA6CkpIRRNiNPHb5vjSWx2FNjAOxVPzEwFKP1glQq7d+//4MHD+Lj4wG0b98egEQiiYiIEIlEycnJsbGxVUdNHjx4MDs7e8iQIZGRkQzDdOzYUZ1jubu7Ozg43Lhxw9TUFEBgYCD7uZoHZdnb27/zzjuVPuzUqROA6Ojo3NxcKyursrKy8+fPl38OoKCg4M6dO127di0pKWE3seMTpFKpqalpcXFxWlpao0aNbt++rfSgdfi+NZZE6gP6t7G+aNKkCf45S/L19WUf7/j5+S1ZssTNzc3b27vq9S/7IOjhw4cHDx6cPn06exnOnt+Zm5sDCA8PP3HiRKW9RCLR+PHjFQrFxYsXXV1dXV1d2c/VPGg1BgwYwEZkx44d58yZ065du+zs7FatWo0fP768zZAhQ4KDg52cnNLS0qysrN5//30AYrH4tddeA9C7d+/g4OCRI0ey90a5f191SiKGj99bs0RLVA14atSoUVZWFsMwly9f7tChA/szIJFIli1bVlZWxrYsf+RSUlLSr18/NnHc3NzYIZxeXl4Mwxw6dIi9fA4ICGCqDEdPTExkP9mwYUPFqqo5aKXKy5/UV/L48eN33323/Kf39ddfj4uLY/55iCSRSEJDQ83MzADY2NicO3eufMdr166xZ77Gxsaffvpp8+bNUeURU92+r6qSmAqPmHJycthP2JsYMTExtf9fSvSXiKFpm+srhULx6NGj3Nzcjh07smdbSqWlpYlEoqpvPZaWlj5//tzc3Lxhw4YaP2j1MjMzExIS2rRp07p1a/aT7OxsGxsbiURSUlIik8lSU1OdnZ3ZO6oVpaSkNG3atPr3Suv2fauWROoPilFiCCrGKN+1kHqH7o0SQggn9KSeGAKpVPrw4UOlD44I0Ta6qCeEEE7oop4QQjihGCWEEE4oRgkhhBOKUUII4YRilBBCOKEYJYQQTihGCSGEE4pRQgjhhGKUEEI4oRglhBBOKEYJIYQTilFCCOGEYpQQQjihGCWEEE4oRgkhhBOKUUII4YRilBBCOKEYJYQQTihGCSGEE4pRQgjhhGKUEEI4oRglhBBOKEYJIYQTilFCCOGEYpQQQjihGCWEEE4oRgkhhBOKUUII4YRilBBCOKEYJYQQTihGCSGEE4pRQgjhhGKUEEI4oRglBkUmkyUnJ9d59/j4eM3VQuoLilFiUO7cuTN58uQ67+7j46PBYkg9QTFKDJlCoQgJCbG3t/f19Y2LiwNw/PjxxYsX9+7du23btj/99BPbZt68ec7OznPmzGEYRp1dCKmIYpQYspiYmLi4uLt374aGhi5duhRAbm7u/v379+3bt3Xr1i+++ALA+fPn//jjjytXrrRs2TI3N1edXQipiGKUGLJTp05NmDBBKpV26dIlKSmpoKAAwLBhw2xtbQcOHPjkyRMA58+fDwgIaN68eXBwsFgsVmcXQiqiGCWGLDU11dramv11SUkJwzAAzM3NAYhEIvbz9PT05s2bs58bGxurswshFVGMEkPm6ekZFRUFICkpSSqVWlpaVm0zcODAc+fOAbh27VpRUZE6uxBSEcUoMTSXLl1q8Y/8/Py4uLh+/fp169Zt7ty5StsPHjz43r17vXr1WrFihbW1tZeXV427EFKRiL1mIcSAZWRkWFlZsRfmqqSnp9va2pZftquzCyEsilFCCOGELuoJIYQTilEiYCUlJcbGxiIdonGjpCoJ3wUQUndJSUlt27b966+/+C6E1Gt0NkoE7OHDh05OTnxXQeo7ilEiYAkJCc7OznxXQeo7ilEiYHQ2SvQBxSgRsISEBIpRwjuKUSJgDx8+pIt6wjsafk+ESi6XW1lZ5eXlSSQ04ITwic5G9UhaWtq5c+dkMlmNLWmtCwBJSUmtW7emDCW8oxjVCwqFIjAw8Pvvv4+NjZ0yZUp4eHj17WmtC9CNUaI3KEb1QnJy8o0bNz7++OO5c+fu3r27RYsWAAICAu7duwcgNjY2KCio0loXSle2+Pzzzx0dHXv27BkbG1u1B/6+n1bQjVGiJyhG9YKDg0Pnzp1bt249derUkydPDhkyBICLi8uxY8cAHD161MXFpdJaF1VXtkhMTDxy5EhMTMy8efPGjRtXtQdev6Lm0dko0RMUo/oiIiIiMjKyRYsWs2fPHj9+PAAfH5/jx48DOH78+HvvvVdprQtUWdkiMjLS0dHx1KlTcrk8KyvrxYsXlXrg9ftpHg0aJXqCbs/rhWvXrhUXF/fp0+fNN99cvHixg4NDdna2s7NzUVHR/fv3i4qKHB0d09PT+/Tpg3/WukCVlS0eP37MMExOTg6AxYsXGxsbV+qBv++nFXRRT/QEnY3qBRsbm9WrV5eVlQGQy+UKhYJ9AD1ixIg5c+awJ5KV1rqo2sngwYMtLS1nzZoVFBR07tw5CwuLSj0YmIkTJ9rb2/NdBSE0blRvLFiwICYmplmzZo8fP/b19V2wYAGA2NjYTp06/fnnn+3atXvx4sXYsWNlMplEInn27FloaGhcXNyqVasA2NnZPXnypKSkxM/PLycnJykpacmSJewzpYo98PwNCTFQFKN6pLS0NDU11cHBofyT1NTUwMDACxculH9Saa2LqjIzM01NTRs3bqyqB0KIZtFFvR6RSCQVM/TkyZMBAQFLly6t2KZly5bVL/PbvHnz8gxV2gMhRLPobFQvnD17dsCAAbo8YsOGDW/dukVX+oRwRzFaT+3cuXPNmjW3bt1q2LAhr4XkAA+BJ0AG8ARIBTKBQkAG5P7zi3JWgC1gAzQDWgCtgDaAPdAGkPL2DUi9RzFafwUFBRUVFe3bt0+Hx2SAv4AY4A/gARAPZAClQBlQVqcOxYAEEAPWwJuAK/A60AlwAqq79aEzecBWYDZgxnclRHsoRuuvgoKCt99+OyQkZNKkSVo+VAJwHrgKXAWeAnKgVGvHEgPGQCugN+AOuAF8ji2dCWwDugLbgU481kG0iWK0XouLi/Pw8Dh79uwbb7yh6b4Z4HfgFHAM+B0oruv5JhdiwBRwBkYCQwGNf8canAFGAIUAABtgA+Cn4wqITlCM1nc7d+5cvXr1rVu3GjVqpKEu04AI4EcgHigG9OEHTASYAe2BUcBYQBcvdGUBbkBChU9MgAnAV4C5Dg5PdIhilCAoKEgmkx04cIBLJ6WK0oy8862tvgdOAgX6kZ5ViQBzYBAQCAwCjLV3pEDgf1X+FMTAu8BuwE57ByY6RzFK/r5JOnv27ODg4DrsnpGf8f2d73f9vqtdM8vj7ycBuRqvUAuMgbbAVGAC0ETjvR8DfAElb+wCIqATsAd4XeNHJTyhGCUAEBcX9+677549e7Zr167q7/Xk1ZPNNzf/cPeHbFm2glGYS8yT5va1sYjUXp2aJgYaA+8DM4H2muo0DXADUqpt0xzYB/TR1CEJr+gtJgIALi4uX375pa+vb26uWueSyS+TZ52Y1Xlr53VX1mUWZCoYBQBZqWz37wrAVMvFalAZ8BzYDHQH5gNPuffIAHOB1JqaZQIjgWPcj0f0AJ2Nkn8FBQUVFBRERERU0ya3KDfsZlhYTFhWQRabnhVZN2iWNr+1sfiuNsvUEhHQBJgGLASs6tzLHmASUKxe44bAVt0+vpfJZMnJya+99hr722fPngFo1qxZrTpJTk62srJq0uTvmyHp6elisbh58+ZKG798+bK0tLS2hxAWOhsl/woLC4uLi9u8ebPSrQpGsf3O9i7fdll2YdnT/KdVMxTA88KcK4+dALGWK9UGBsgB1gLdgYN16yId+FjtDAWQBwQDh+t2sDq5c+eOq6tr+b+U33///c6dO2vbSUxMjJeXFzuvY3Z2dvfu3dk4Vuro0aM1ri0mdBSj5F8WFhZ79+7Nz8+vuunBswfD9w+feWJmcm5yGaNyBKgCitDzfwBNtVmmVpUBDwB/wBv4q1Z7KoCZwONaHq8ACACO1nIvLjw9PcPCwl68eFHxw0qreI0ZM+bx48dyudzV1TU5ORnA4MGDyxuPGTOmbdu269evBzB16tTZs2e7uLgoFIqQkBB7e3tfX9+4uLgzZ84sXbq0V69e7O4AFi1aZKh5SrPfk/9wdXV1dXWt+ImCUXx769vlF5dny7LV6eH3p8mPcwe2ttJlMmicHDgO3ASWA5PVPLneAUTWaZxXPhAI/AT0r/2+dWBiYhIaGrpw4cLyUCtfxSsqKmrcuHH37t2ztbW9fv26vb19SkrK1atX5XK5iYlJxU42b9785ptv5ufnZ2VlhYSEAIiJiYmLi7t7925qaurSpUvHjRu3bdu2Xbt2paenZ2VlrVmzJiMjY+3atTr5irpGMUqq8+jFo6mRU6OSoqo5A62kqLTom5j89Z5mKgb8CAUDZAIngSnqtE4GPgFK6nqwXCAAOAV0rmsPteLl5fXtt99evHiR/W35Kl4A2FW8+vbt++uvv2ZkZEydOvX69evFxcX9+vWr2INUKt20adOYMWNiY2ONjIwAnDp1asKECVKpVCqVJiUlFRcXDxkyZNCgQbt27frpp5/i4+OfPn1a/RyPwkUX9USl7Xe29/y+57lH59TP0H92vF1YUouBU/rKFtikzt+RMmAa58f8GcBo4Am3TtS3YcOG2bNns6vRlK/ilZOTw67i5eHhcevWrejo6FmzZv32229Xr17t27dvpR66d+9ubW1dvsZXamqqtbU1++uSkhKGYaTSv6fdMjU1HT9+/IYNG3T15XSNYpQoUVxWPP/M/FknZmUWZDK1v059WfTybFJrgV/rGANrALXWetoCnNfEa1sPAV/gFed+1OHo6Dhs2LAtW7ZA2Spe7MzfmZmZrVq1atCgQVxcXI0LdHt6ekZFRQFISkqSSqVmZv/OaeXt7b1mzZrt27enpFQ/mlaoKEZJZam5qYN+HLQxemNxmfrPnCtbdCaaYWw1WJVuiYCRQIA6TR8CKzlczlfEANHAPF29SPvxxx+zdzx79er1/Pnz/v37u7q6jhgxgr307tmzJ7tiYPfu3dVZVtbLyysuLq5fv37dunWbO3dupa1SqXTBggXsCmOGh8aNkv+4nHo56EjQoxeP6nASWpGxkfEf04a3b3ZIX1+ur14b4AbQosZ2cmAgcFGjxzYGvgBma7RPdVRaxatuMjIyrKys2KW/6w86GyX/inwY+d7+9xJfJHLMUAAlipIvrmcLczIjE2C9OhkKYBNwRdOHLwGWAjGa7rZGFVfxqjNbW9v6lqGgGCXlNsds9o3wfV74XFMdRsTefSV/W1O96YoI8Ad81Wl6F1ipnQmoXwETgRxuneTl5S1fvrxRo0YifVJQUKCZPyN9QjFKoGAUS6KWLDi7QFYqq7m12l7JXx2930Srk9FpgSOwTp12cmCuNiezug98XNd98/LyPvroI3t7+xcvXiQmJjL6xMLCQpN/TPqBYpRg+cXln1/7vKhU88M8V/x6U8G00Xi3WmMKbALUevt7LXBVm6UogB9q/3ZTaWnptm3bOnbs+OjRo+jo6I0bN5YPQiLaQzFa3y2JWrL2ylp5mVwbnafkZtzLfFMgP2ZGwATAS52m14HPtb8oihwIAbLUa8wwzMGDB11cXPbv33/48OGIiAhaPVtn6El9vbb2ytplF5dpKUNZ73Xo9rPvn7oaDcnFa8A1deZ2KgB6AbqZw0oETAK219Ts3LlzoaGhZWVl69ev799fN++Ukn8J4jSBaMV3t79bfnG5VjMUwJnE+JzCnlo9hCaYAV+rOT/eeuCetsv5BwP8CFxQ3eDWrVuenp7BwcEffvjhrVu3KEN5QTFaTx26fyjkVAiXAfZqKigp+PEPY8Ck5qa8MQKmAp7qNL0AfKHbNU6LgIXKJt/766+/xowZ4+3tPXr06Pv3748ePZp9t53oHv2510c3029OjZyq2efy1Vh9+UapQp/v070OfKpOu5fATEBHf2oV/A7sqvLhoUOH7OzsYmNjp0yZUmn6JaJjdG+03kl6meS52zPxRaLOjmgEo0sTR7u1/omPpeprZA6cAnqp03QesAlQMlu19tkDt4U8jatho7PReufco3NpeWm6PKICik+iHgBc35DRAjEwR80MvQBs4ylDATwGtvJ0aFIjilGDU1SE775DqcqXayZ3nXx07FG7RjpdKf3akz/T89x0eUT1dAWWqNMuB5jGx+V8OQUQBqg1bzbROYpRgzNvHmbNwvDhyMxU1WSA44CLgRd7tu5pJNLRD0BRadH2O3LArOamutMQ2KzmW/+hwENtl1OTbGAb3zUQpShGDcu+fdixAyUlOHkSvXvj5k1VDR2ljqf9Twe6Bhob6ehlzU3RMcWlnXRzLDWIgQVAN3WaHgV28Xc5X449IdXYlAdEcyhGDcijRwgJgVwOAAyDBw8wZAhUr5ZsaWL5/bDvNwzcYGliqYPqXha9vJjioDeLhvYEFqnT7jnwYW0W+9SqLGAv3zWQquhJvaEoKcHAgbhQZaS2iQkmT8bnn6NBA1W7nnt07oNjH6Tkan1m8i4tnO4E54u4LrfBXWPgEqDWqfF4YI8+zZnaAbgntOleDB6djRqKzZtx+bKSz+VyfPsthg7FY5VL//Z36B8VGOXexl3bt0rjs1KTX/YE+F3XTAIsVjNDDwAR+pShAB4BZ/iugVRCMWoQHj7EypUqn86XleHCBQwahNu3VXXg0MThlN+piV0mavVWqVwh/+r6C74fNPUBKi9xodQTYAGg3Vdla08O7OC7BlIJxajwMQzmzcPzap89MAzi49G3L8LCVDWxMLHY5r1t85DNjUwbab7If+z67bas5E3t9V+TZkCYmmvtfQTodHit2k4DyXzXQCqiGBW+fftwRr3rvFevMH8+pk1DYaHS7SKRaHLXySf8TjhJnUTaufR+JX914mELnhYNNQaWAWq9lrpT/y7nyxUCh/iugVREj5gELi8PXbsiIaEWu4jF8PTEjh2wVblyZ1pe2oQjEy4kXajtCvXq6NDUPn6GSCRK1njP1RIBQ4Cj6pw6PAJ6AiqH3eqBbnws1kRUobNRgdu0CY8e1W6XsjKcPg03N/z6q6omrRq2+uX9X2a8PcNErPk5LxJepN1/1k3nD5qaA9+o8wNfBsxSe7Jkvvyhw8n6SI0oRoUsPR0bN0JR+4HhDIOkJAwdirAwqLgcMZOYbRy0MXxYeBOzJlzr/K9SRelnl1IBXa7JYwx8BvyfOk13AWf19XK+XDFwjO8aSDmKUSH75hs8e1b33fPzMX8+5sxBkcpVmMZ3Hn/C70S7pu00e6s08q+4l8XvaLDDaomAEcAkdZo+AD4ESrRdEWcMEMl3DaQcxahgpabi229VnUuqSy7H5s3o0wcPVb4y3t2u+8UJFwc4DhCLNPYCUr48/1BcI12NIm8JfKnOPYQSYIZw3rb8A1A5EpjoFsWoYG3dilxNrO+rUCA6Gr174+RJVU1sLW2Pvn90Tvc5pmJTDRwRALDi1+gypq2melPNBFgHtFanaRhwSdvlaE5xtYuLEF2iGBWmp08RHs71VLSi9HSMHo2VK1XdaTUVm3454Mvt3tulDaQaOWDaq8w7T7to+SdQBIwG/NRp+jvwKaByekH9Uwac57sGwqIYFabdu5GTo+E+Cwrw2WeYNg0ylfNqjncdf8rvVPum7bnfKlVAsTTqL0CLQ/0Be+BLddqVACHAS22Wog2X9P5RWD1BMSpAhYX47ru6PKCvkVyO8HD07o0HD1Q16daq28UJFwc5D+J+q/Ry8l9ZBdpbNNQU+BJork7TLwGVg7/0WCZQmwHDRFsoRgXo8GGkpmqrc4UCN2+ib19EqnwU3MKyxbGxx5b3Xs7xVqmsVLbnnhjQ2P3WCoyA8YCPOk1vA2v0cpWoGsmBO3zXQEAxKkg7d1azRohmZGRg7Fhs3Kjq9qvESLLk3SU/+vxoY27D5Thrr0SXlHXk0oMKTsBaddoVAtOBV1qoQAfKgLt810BAMSo88fG4ckUXByoowMKF8PPDS5X3DEe9Nupc4DnX5q51vlX6TPb82pP2mp7L2QzYqOYyml8AKqe9EgKVyxsQHaIYFZqff65mtLyGlZRg/37074/4eFVNOtl0Oh94/r2O70mM6jLbiAKKJef/ADT4opQR8AEwSJ2mV4F1wrycLxerB6ubEIpRQWEYRERocpyTOke8fRsDB+L0aVVNmjZoemDUgWUey8wkdZlI9FbGoyevNLho6GvAKnXa5QMzgALNHZgX+UA63zUQilFBuX0bf/3Fw3GfPMHw4Vi4ECXK35Nkb5XuHbnXxqLWt0qLSou+u1WkobmczYHNag6iWgH8oYlD8qtUD5YsJRSjgnLy5N8r1ulecTG+/hqjRyNb5WLp73V473zg+a62XWu7GEnYzRtFJV04lygGpgPvqtP0PLDZIC6HS4FEvmsgFKOCcvSoTq/oKyktxS+/oF8/3FX5fPh169fPjT838rWRtbpV+rLo5bnk1pzncu4CrFCnXR4QAiifuVpoFPRmvR6gGBWO5GTcv89zDQoF/vgDgwfjmMp52po0aLJv5L5lHssaSFSuRVrV4vN3GHAZO2UJbAHM1Wn6MRDL4Uj6Rp+nl64nKEaF49IlFOvHeulPn2LMmGpulYpF4iXvLjnse7hVw1Zqdvkg+3FiTo+6zuUsBuYBb6vTNBLYbhCX8+V4X66aUIwKx6VLKNObwTnsrVIfH2SpnCd+oNPAixMudrfrrs6tUrlCvu5qFlCLE9gKugMfq9MuC5gL6Me/RRpDMco7ilGBYJhq1vzgR2kpjh/HwIGIVXmJ7CR1OuN/ZrzreHXWbY6I/T1f3q32dTQGNqv5oH8ZkFT7A+g5uqjnHcWoQDx6hDT9W+6XYfDbb/DwwI8/qmrS0LThD8N+2DBwg4VxDauGvJK/OvZn01rO5SwBPgRc1Wn6M7DDsC7nWfl8F0AoRgXit99U3YjkX04OJk3CwoWqBmOJRKKZb888PPZwG6s21fe0JOqGglFriuV/9ATmq9MuHZgL8DRYTLuKDPHfBmGhGBWIu3e1Ph0JF3I5vv4aQ4bgyRNVTTwdPKMCo9xau1Vzq/Txq8y4rLfUftAkBbYANa9dygBzAZWVCZ+B3e0VHIpRgbin9+vplpbi/Hl4eVUzqtSxieNp/9NBXYJU3SotVZSuupKi3qKhEmAx4KJOafuAE4AEMDbE/4woRvkmYngczk3U17YtkpP5LkI9jRph1SrMnKlqO8Mwm29u/vj8x3nyvKpbLRUMo+AAABXeSURBVE0sU+f1bGJ2ptpjiABP4LiaI/bvAEqOZEB6qHNOTrSGYlQIsrLQtm01a3voHRMTfPABvvgCDVQOYIpKipp4dGJqbipTZSGMrUOGT33rZLV3Mm2AK4CzhsolhBO6qBeCxES9vjFalVyO777DyJHIVDkap2/bvhcmXOhl36vqrdJPf71eqnBU3bsxsJwylOgPilEhePxYjwbeq6msDKdOoUcPXFK5aHHbxm1P+5+e0W2Gifg/l6SZ+c9uZ3RW8cMpAgYDwZoul5C6oxgVgowMrSxgp20Mg6QkDB2KsDBVTcwkZpu8NoV7hzc2bVz+oQKKTy48AKyU7WELbKSfW6JX6MdRCNLT+ZzYiaO8PMyfj6lTq1+3+YTfiXbSduWLkVxJefg0v+pczibAKsBea7USUhcUo0Kg+g6jMLDrNo8YUc2LWD1a97gw4YKnoye7brOsVPbDXcV/Fw0VAT5AoPbLJaR2KEaF4PlzvivgrKwMZ8+iZ09cuKCqScuGLY+OPTrrnVnsrdIvrkUXl71eYXsbYENdp4AiRIsoRoUgJ4fvCjQkNRVDh2LlSlW3es0kZl8N/CrcO1zaQPqy6OWVFKd/Fg01BdYCtroslhA10bhRIXjtNf4nbNYgExNMmoQvvoC5ylmWb6TdCDwc2KSB6PqkF0A2EAjs0GWNhKiPzkaFgK/1l7SEHVXapw/+/FNVk3davXNxwkVrc+fklz0AB2C9LgskpFbobFQI2rTBY0NcccfWFuHhGDxY1fbisuIrqWH92joBw3VZFyG1wnERMUEqKChISkpydnY2Nf37QXBiYqKZmVmrVuqueAEgOzsbgLW1taoGubm5RUVFzZs351gtAP2dIo+jjAyMHYvVqzFjBkRKnh2Zik0zrs5v0lVg73DViqUlMjL4LoJwUx9jNDo62svLa8eOHf7+/gBkMlm3bt18fHzCw8PV7+TAgQMKhWL27NmqGiQkJKSnp3t7e2ugYgNWWIgnT5RmKICTJxEcLKS5BOqgceOa2xA9V0/vjbq7ux88eJD9dWRk5FtvvcX++ujRoxs3bgRQWFg4fPjw48ePh4SEeHh4vPHGGxEREV27du3QocO9f+asu3HjhouLS79+/W7cuAFg8eLFLi4uHh4ed+/eBZCVlZWUpKEVK0xNa24jREZG8PfH6tVKN965g8BAA89QoJrHbEQw6mmMWltby2SynJwcABEREcOGDWM/f/nyZVZWFgCFQpGQkJCbm7t///4ff/zRx8dnxowZR48enT179vbt29nGt2/fPnPmzEcffTR//vykpKSEhIS7d++uWLFizZo1AF68eJGmqWU/DDJGRSJ4emLLFhgp+SF88gTjxiE7W/dl6RrFqAGopzHKMIy3t/ehQ4fy8vKys7Nbt1a5cEX//v1bt2795ptv9u3bt3Xr1q6urunp6eymESNGtGrVytPT8+XLl1KpdNOmTXv37t21a1d5A40xyBht3x47diidSe/VK/j6VvMY36BQjBqAehqjAHx8fA4cOHDkyJHByp4U5+bmsr9gE1YkEllZ/T1TRvnYhvLHR6ampjdv3uzbt29OTs7QoUM1X2uTJprvk1+tW+PIEbRsWXWLQoGZMxEdrfua+GFpyXcFhLP6G6N2dnaFhYVhYWE+Pj7lHzZu3Jg9l7x69WqNPVy+fBlAZmamqanp5cuXg4ODQ0JC/vrrL83X2rSp5vvkUaNG2LUL7dsr3bhgAfbuFeSEVnVTm+EhRE/V3xgFMHz4cJlM5uz87wTA7u7uz549c3d3j4yMNFJ2z66ip0+f9uvXr3PnzrNnz/b29v72229HjRqVnJycmZnJPnTSmGbNNNkbv8zMsHUr+vRRunHrVoSFCW9uVS4oRg0ADb9XIj8/31K9a63c3FyxWMw2LioqKigoaNq0qUwmMzY2Njau1Xrr1VqyBKtWaaw3HkkkWLQIK1cq3Xj8OEaPRmGhjmvik0iEsDBMn853HYSb+jhutEZqZiiA8humAMzMzMzMzACYq3hqUFhY+EI9c+bMWbRo0b972tlBJBLwlKMssRiTJuGzz5RuvHULEybUrwwFIBZDI+9nEH7Vxxj19/ffs2eP7o9rZmbWRBkHB4eqH/5nz5YtIRYL+1UekQgDBuCrr5SOtM/IQEAAnj3TfVk8MzJS+piNCAxd1AvB7dtwc0OxkFcjd3HBuXNo0aLqltxcDBpUjx7NV2RhgZQUQ3uCWA/V60dMgtGuHTR4p1X32rTBzz8rzVC5HIGB0OwDOQGxs6MMNQQUo0LQsCHsBbsAUZMm2LcP7dop3bhoESIjBX/Xt866dOG7AqIJFKMC4eLCdwV1YmqKLVvQs6fSjWFh2Ly5fg1vqqRzZ74rIJpAMSoQQvwLJ5Hgo48wdqzSjT//jIULDXYKQHVIJOjYke8iiCZQjApE164Cuz0qFmPyZCxbpnTjvXuYNg1FRTquSb8YG9NFvYGgGBWIt96CiQnfRahNJMLAgdiwQenwpqQkjBiBrCzdl6VfnJ3Rti3fRRBNoBgVCGtrODryXYTaXn8dO3bAzKzqlpcvMXYsNDURq6D17ct3BURDKEaFw9OT7wrUY2+PQ4eUvp1TXIyAANy8qfua9I5EAjc3vosgGkIxKhy9ekGi92+dSaXYtw8VZnup6MMPceJE/R3eVJGJCdzd+S6CaAjFqHD07Kn0MlmPmJri66/Ro4fSjVu3YuvWej28qaLOnZW+jkAEiWJUOKyt9fo60NgYn36K8eOVbvzpJ4SE1OvhTRWJRBg9mu8iiOZQjArK0KFKVy7in1iMKVOwcKHSjTExmDq1vg9vqsjMDMOH810E0Ry9/DtJVBk4UB/XZTIywrBhqoY3PXoEX188f677svRXt25CGnZBakQxKijOznB15buIKjp3xrffKh3W+uwZRo9GcrLOS9JjRkaosGwNMQQUo0Lj769f1/WOjjh8GDY2VbeUlGDaNNy9q/ua9Jq5Of5Zz5sYCH36C0nUMXKkHi0mKZVizx783/9V3cIwmDkThw/T8KbKhg6ll5cMDcWo0LRooS/j8E1NERaGd95RuvHLL7FjBw1vqszEBEFBfBdBNI1iVIA++ID/9+uNjbFyJd5/X+nGgwexdKmwFz3Rko4d0b8/30UQTaMYFaABA3ieYU0sxtSpmD9f6cbLlzF5Mg1vUsLICBMn6tedbaIR9L9UgIyMEBTE219HdnG69euVDm9KScHEicjN1X1ZAtCsmarJV4mwUYwK08SJaNWKn0N364Y9e5S+lpqdjffeQ0KC7msSACMjzJqldEQDETyKUWFq2BAzZvBwQurkhIgIVFr/GQBQVISgIPz2m64rEormzTF9Ot9FEO2gGBWsyZOVTkanRdbWiIhQurgew2D2bJw8ScOblDMywvTpkEr5roNoB8WoYEmlmDZNdyekDRogLAxvvKF048aN2LkTCoWOahGcZs0wZQrfRRCtoRgVsnnz4OCgiwOZmGD1aowZo3TjgQMIDaXZm1QSixEaSndFDRnFqJBZWmLBAq3P5SwWY/ZszJ2rdOPlywgOpuFN1enale6KGjgRQ3ezBK2oCD17avHFdZEIQ4fi4EGlM0vdvw9PT6SlaevgBsDUFMeOYcAAvusg2kRnowJnZoavv9bWrPgiEdzdsWeP0gzNysK4cZSh1RGJMGoUZajhoxgVvnffhb+/0sHwXDk54ccf0bBh1S1yOSZPxu+/a/6YhqRZMyxfzncRRPsoRg3CsmWwtdVwn1Ipdu9GmzZVtygUmD4dkZE0vKk6xsZYtw5OTnzXQbSPYtQg2NlhwwZNzldiYYFdu9C9u9KNa9di1y4a3lQdkQhjxmDCBL7rIDpBj5gMSGAg/vc/DZwiGhtjwwbMnKl0465dCA5GcTHXgxi2tm1x7Rqt/VlfUIwakPR0uLlxXbJDLMa0adi0SenN1uvXMXQocnI4HcHgmZpi715aKaQeoYt6A9KyJXbsgIVF3XswMsLIkfjqK6UZGh+P0aMpQ2sgFmPhQsrQ+oVi1LD06YPQ0LoPyHdzw/ffK92dhjepQyTCsGFYtozvOohu0UW9wZHLMWpUXZ6jOzri7Fml6wTJZBg2DFFR9Gi+Bl264Px5moKk3qGzUYNjYoJdu/Dmm7Xbq3lzHDqkNEMZBiEhuHiRMrQGUim2b6cMrY8oRg1RkybYtasWI0kbNMB338HVVenGzz6jxelq1rAh9uzBW2/xXQfhA8WogXrtNRw8qNapkYkJvvwSw4cr3bhzJ1avptmbamBujh07MGgQ33UQnlCMGi43N+zdW8Oi9hIJQkIwbZrSjWfPYvZsGiJaA1NTfPMNRo3iuw7CH4pRgzZwIDZsUDqxCAAYGWHYMHz6qdKNDx/igw+Ql6fF6gyAsTEWL8bEiXzXQXhFT+rrgR9/xJQpKCz8z4ciEXr1wvHjSk9X09Ph6Yn4eB0VKFDs7RAVb3uRekTLM/4SfcDO/zR58n+StGNHHDigNENlMvj74/593RUoRObm2LIFgYF810H0AMVo/eDnh9JSzJyJ/HwAsLbG7t1KX/kuK8Pkyfj1VxreVB0rK+zciREj+K6D6Ae6N1pvBAbi559hY4OGDbF3r6qBpZ9/joMHafam6tjYYP9+ylDyL7o3Ws9cvYoHDzBpkqrtsbHw98e9e3Q2qoRIhLfewv79OlpIkAgFxSipLCcHU6bg6FGUlvJdij6RSDBiBLZvR+PGfJdC9Axd1JPKpFLs3Yv581UOlKqHTE0xdy727KEMJUrQ2ShR6eBBhIQgLa1eX+CLRGjTBps2Ydgwvksh+opilFQnKwsLFuDAAcjlfJfCBxMTvP8+vvgCzZrxXQrRYxSjpAYMg/BwLF6M7Gy+S9EhkQjNmmH1akyapJVFV4khoRglann4EB99hMjIenFaamqK0aOxciXs7fkuhQgBxSiphcuX8fHHiI422If4EgneeQfr1sHNje9SiHBQjJLaKS5GeDhWr0ZGhkE9ejIygo0NQkIwcyYaNOC7GiIoFKOkLp49w5Yt2LwZz54J/pUnIyM0a4bp0zF9Oqyt+a6GCBDFKKm7/Hzs3Il165CeLsgwNTKCrS3mzsWkSWjShO9qiGBRjBKusrPx/ff44QckJQlmnnwTEzg5YdIk+PmheXO+qyECRzFKNEOhwJUr2LULP/2EvDw9vW1qZARLS4wahcBAuLvDiF7iI5pAMUo0LCEBERE4cgSxsSgq0os8FYlgZoauXTFyJEaMULr+KSF1RzFKtOXPP3HqFI4exY0bkMt5GCMlFsPUFJ06YdQoeHujfXtdF0DqCYpRonVPn+LyZVy5gqgoPHqk3UiVSGBiAnt79O0LNze4uaFNG20dixAWxSjRqUePEB2N+HjExuL335GdjZISKBQoK6v15b9IBCMjiMWQSGBnh86d8frr6NABb74JJ6fadbV27Vo/P7/WrVvXbjdCAFCMEn6lp+P+fWRkIDMTT58iIwNpacjNBcOgsBCFhX9nq0SCRo1gagoLC1hYwM4ONjZo2RJNm6JlS7Rrx3XqkNDQ0CdPnvzvf//TyJci9Q3FKCF4+fKls7PzmTNn3njjDb5rIcJDIz4IQePGjRctWrR48eJq2hQUFMTGxhYXF5d/kpiYmJaWVmPnubm5mZmZtaonISHhyJEjCQkJde6B6BLFKCEAMHPmzLi4uPPnz6tqEB0d3bVr14MHD7K/lclk3bp1W7ZsWY09JyQkxMTEqF/J9OnTP/zww8TExP379w8fPjw1NbW8h6SkpE8++UT9rohuUIwSAgBmZmbLly8PDQ2t5jaXu7t7eYxGRka+9dZb7K8///xzR0fHnj17xsbGAlixYsXGjRsBbNiw4ZtvvsnKykpKSlIoFLNmzbKzs/Py8kpLS1MoFCEhIfb29r6+vnFxceWHOHbsWEpKys8//zx//vwlS5Z8/vnnqampbA8AgoKCNm7cKBKJ7t27ByA2NjYoKEhrfyREXRSjhPwtICCgsLDwp59+UtXA2tpaJpPl5OQAiIiIGDZsGIDExMQjR47ExMTMmzdv3LhxAKZMmbJ+/fro6OjNmzcHBAS8ePEiLS0tJibmyZMnKSkpI0aM2LZtW0xMTFxc3N27d0NDQ5cuXVp+iLt373br1q38t+3atXN3d2d7APDNN9+4u7uvXbv22LFjAI4ePeri4qK1Pw+iLopRQv4mFotXr169ePHiEhVTAzAM4+3tfejQoby8vOzsbHaAVGRkpKOj46lTp+RyeVZW1osXL2xtbRctWtSnT5/Vq1dbWVmx+54+fXrMmDFisXjSpElTpkw5derUhAkTpFJply5dkpKSCgoK2GYSiaTi7VelfHx8jh8/DuD48ePvvfeexr4/qSuKUUL+5e3tbWdnFx4erqqBj4/PgQMHjhw5MnjwYPaTx48fMwyTk5OTk5OzePFiY2NjAObm5iUlJZaWluU7JicnN27cGIBEIrGxsUlNTbX+Z1a+kpKS8jsJjo6OFy5cKN/r9OnTc+bMqVSDs7NzUVHR/fv3i4qKHB0dNfC1CTcUo4T8x9q1a1esWJGXl6d0q52dXWFhYVhYmI+PD/vJ4MGDLS0tZ82aFRQUdO7cOQsLi+zs7JUrV/7yyy9z5syRyWRss/79+1+8eBHAkSNHlixZ4unpGRUVBSApKUkqlZYHrpeXV2pq6u3btwGUlJSsX79+5MiRFQtQKBQARowYMWfOHDoV1RMUo4T8x9tvv92jRw/2GZFSw4cPl8lkzs7O7G979er1/Pnz/v37u7q6jhgxQiQSzZ8/f8aMGV5eXl5eXitWrGCbDR06NDk5uXfv3qtWrWK3xsXF9evXr1u3bnPnzi3v3MrKavfu3aGhoe7u7u3atevSpcu7775bvtXBwSE+Pj48PHzkyJFnz5719fXVzp8BqR0afk9IZX/++WePHj0ePHhgY2Oj5i6ZmZmmpqbsZXs1cnNzy++WAsjIyLCysjI3N6/aUtWm0tJShULx9OnTwMDAipf/hEcUo4QoMXnyZEtLy6+++orvQpQ4efLkunXrPvnkk759+/JdCwEoRglRKiUlpUOHDkVFRXwXUrNDhw6V36glvKAYJYQQTugREyGEcEIxSgghnFCMEkIIJxSjhBDCCcUoIYRwQjFKCCGcUIwSQggnFKOEEMIJxSghhHBCMUoIIZxQjBJCCCcUo4QQwgnFKCGEcEIxSgghnFCMEkIIJxSjhBDCCcUoIYRwQjFKCCGcUIwSQggnFKOEEMIJxSghhHBCMUoIIZxQjBJCCCcUo4QQwgnFKCGEcEIxSgghnFCMEkIIJxSjhBDCCcUoIYRwQjFKCCGcUIwSQggnFKOEEMIJxSghhHBCMUoIIZxQjBJCCCcUo4QQwgnFKCGEcEIxSgghnFCMEkIIJxSjhBDCCcUoIYRwQjFKCCGcUIwSQggnFKOEEMIJxSghhHBCMUoIIZxQjBJCCCcUo4QQwgnFKCGEcEIxSgghnFCMEkIIJxSjhBDCyf8DjltIuY9OgO4AAAAASUVORK5CYII="
}
],
"prompt_number": 24
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally, the `ihaskell-magic` chart uses the [magic](http://hackage.haskell.org/package/magic) library (bindings to `libmagic`) to create a display mechanism for `ByteString`s. If you try to load an image, for instance, you will see that image immediately in the notebook."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import qualified Data.ByteString as B\n",
"B.readFile \"/Users/silver/code/IHaskell/images/ihaskell-notebook.png\""
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<span class='err-msg'>user interrupt</span>"
],
"metadata": {},
"output_type": "display_data",
"text": [
"user interrupt"
]
}
],
"prompt_number": 32
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"text": [
"/Users/silver"
]
}
],
"prompt_number": 28
},
{
"cell_type": "code",
......
......@@ -652,6 +652,10 @@ evalCommand output (Statement stmt) state = wrapExecution state $ do
evalCommand output (Expression expr) state = do
write $ "Expression:\n" ++ expr
-- Check if we can display this.
let displayExpr = printf "(IHaskell.Display.display (%s))" expr :: String
canRunDisplay <- attempt $ exprType displayExpr
-- Evaluate this expression as though it's just a statement.
-- The output is bound to 'it', so we can then use it.
evalOut <- evalCommand output (Statement expr) state
......@@ -660,8 +664,6 @@ evalCommand output (Expression expr) state = do
-- DisplayData. If typechecking fails and there is no appropriate
-- typeclass instance, this will throw an exception and thus `attempt` will
-- return False, and we just resort to plaintext.
let displayExpr = printf "(IHaskell.Display.display (%s))" expr :: String
canRunDisplay <- attempt $ exprType displayExpr
let out = evalResult evalOut
showErr = isShowError out
write $ printf "%s: Attempting %s" (if canRunDisplay then "Success" else "Failure") displayExpr
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment