<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Practical Haskell: scripting with types</title>
	<atom:link href="http://donsbot.wordpress.com/2010/08/17/practical-haskell/feed/" rel="self" type="application/rss+xml" />
	<link>http://donsbot.wordpress.com/2010/08/17/practical-haskell/</link>
	<description>A Journal of Haskell Programming</description>
	<lastBuildDate>Mon, 03 Oct 2011 02:09:43 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Haskell Realworld: Nice and Basic DSL for CPU &#171; umurgedik</title>
		<link>http://donsbot.wordpress.com/2010/08/17/practical-haskell/#comment-826</link>
		<dc:creator><![CDATA[Haskell Realworld: Nice and Basic DSL for CPU &#171; umurgedik]]></dc:creator>
		<pubDate>Wed, 09 Feb 2011 21:23:11 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=596#comment-826</guid>
		<description><![CDATA[[...] Realworld: Nice and Basic DSL for&#160;CPU   Don Stewart’s presentation is here. He writing a simple dsl (Domain Specific Language) for controlling cpu via gnu tools. If you ever [...]]]></description>
		<content:encoded><![CDATA[<p>[...] Realworld: Nice and Basic DSL for&nbsp;CPU   Don Stewart’s presentation is here. He writing a simple dsl (Domain Specific Language) for controlling cpu via gnu tools. If you ever [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: JadeNB</title>
		<link>http://donsbot.wordpress.com/2010/08/17/practical-haskell/#comment-559</link>
		<dc:creator><![CDATA[JadeNB]]></dc:creator>
		<pubDate>Sun, 22 Aug 2010 13:32:10 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=596#comment-559</guid>
		<description><![CDATA[I think that the type of modify on slide 17 should be modify :: Box a -&gt; (a -&gt; b) -&gt; m b.  (Actually, it seems to me that modify is just fmap . get, right?)]]></description>
		<content:encoded><![CDATA[<p>I think that the type of modify on slide 17 should be modify :: Box a -&gt; (a -&gt; b) -&gt; m b.  (Actually, it seems to me that modify is just fmap . get, right?)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mitch Skinner</title>
		<link>http://donsbot.wordpress.com/2010/08/17/practical-haskell/#comment-557</link>
		<dc:creator><![CDATA[Mitch Skinner]]></dc:creator>
		<pubDate>Fri, 20 Aug 2010 08:17:31 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=596#comment-557</guid>
		<description><![CDATA[&quot;Programmable semicolon&quot; is a great metaphor, and seeing the error handling get abstracted out was an &quot;aha!&quot; moment for me.  Plus now I understand the purpose of monadic bind a little better.

Thanks!]]></description>
		<content:encoded><![CDATA[<p>&#8220;Programmable semicolon&#8221; is a great metaphor, and seeing the error handling get abstracted out was an &#8220;aha!&#8221; moment for me.  Plus now I understand the purpose of monadic bind a little better.</p>
<p>Thanks!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Noah Easterly</title>
		<link>http://donsbot.wordpress.com/2010/08/17/practical-haskell/#comment-556</link>
		<dc:creator><![CDATA[Noah Easterly]]></dc:creator>
		<pubDate>Fri, 20 Aug 2010 02:22:42 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=596#comment-556</guid>
		<description><![CDATA[Cool talk!  I agree with most of the points you make (and I think a Haskell library optimized for scripting would be a great tool), but one place where we differ is on compilation.

I think compilation is a great tool for type- and syntax- checking a Haskell script, but to me, to remain a script, the actual executable has to be the source code, not a compiled binary.  That way, I can, as a reader of scripts, tell what a script does (and how it does it) just by looking at it, instead of trying to track down the matching executable.  There&#039;s a bunch of times where I want to 
* copy some of the behaviour of an existing script
* trace through a particular script to see if it&#039;s got a bug, or if I&#039;m misunderstanding its use.

I do these tasks and tasks like them time and time again with shell code.  And though Haskell, and good practices like sensible error reporting will help somewhat, it&#039;s no substitute for a human readable shell script.

So I&#039;ll be sticking with runhaskell.

Thanks!]]></description>
		<content:encoded><![CDATA[<p>Cool talk!  I agree with most of the points you make (and I think a Haskell library optimized for scripting would be a great tool), but one place where we differ is on compilation.</p>
<p>I think compilation is a great tool for type- and syntax- checking a Haskell script, but to me, to remain a script, the actual executable has to be the source code, not a compiled binary.  That way, I can, as a reader of scripts, tell what a script does (and how it does it) just by looking at it, instead of trying to track down the matching executable.  There&#8217;s a bunch of times where I want to<br />
* copy some of the behaviour of an existing script<br />
* trace through a particular script to see if it&#8217;s got a bug, or if I&#8217;m misunderstanding its use.</p>
<p>I do these tasks and tasks like them time and time again with shell code.  And though Haskell, and good practices like sensible error reporting will help somewhat, it&#8217;s no substitute for a human readable shell script.</p>
<p>So I&#8217;ll be sticking with runhaskell.</p>
<p>Thanks!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Graham</title>
		<link>http://donsbot.wordpress.com/2010/08/17/practical-haskell/#comment-554</link>
		<dc:creator><![CDATA[Graham]]></dc:creator>
		<pubDate>Thu, 19 Aug 2010 08:38:53 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=596#comment-554</guid>
		<description><![CDATA[Is that a new case-style construct on slide 13?

new &#124; old == 100 = 0
    &#124; otherwise  = 100

It gives me a conflicting definition error.]]></description>
		<content:encoded><![CDATA[<p>Is that a new case-style construct on slide 13?</p>
<p>new | old == 100 = 0<br />
    | otherwise  = 100</p>
<p>It gives me a conflicting definition error.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carlos Valiente</title>
		<link>http://donsbot.wordpress.com/2010/08/17/practical-haskell/#comment-553</link>
		<dc:creator><![CDATA[Carlos Valiente]]></dc:creator>
		<pubDate>Thu, 19 Aug 2010 07:39:43 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=596#comment-553</guid>
		<description><![CDATA[@{Don, Kevin, nbathum}: Thanks, guys!]]></description>
		<content:encoded><![CDATA[<p>@{Don, Kevin, nbathum}: Thanks, guys!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: nbathum</title>
		<link>http://donsbot.wordpress.com/2010/08/17/practical-haskell/#comment-550</link>
		<dc:creator><![CDATA[nbathum]]></dc:creator>
		<pubDate>Thu, 19 Aug 2010 03:51:08 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=596#comment-550</guid>
		<description><![CDATA[@Carlos: try downloading the process library: http://hackage.haskell.org/package/process]]></description>
		<content:encoded><![CDATA[<p>@Carlos: try downloading the process library: <a href="http://hackage.haskell.org/package/process" rel="nofollow">http://hackage.haskell.org/package/process</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Michael Vanier</title>
		<link>http://donsbot.wordpress.com/2010/08/17/practical-haskell/#comment-549</link>
		<dc:creator><![CDATA[Michael Vanier]]></dc:creator>
		<pubDate>Thu, 19 Aug 2010 01:15:16 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=596#comment-549</guid>
		<description><![CDATA[Don, 

Cool article ;-)  Thanks.

I think that on slide 25:

  instance MonadError IO

should be

  instance MonadError IOError IO

Also, it&#039;s not clear to me what the ErrorT monad transformer buys you in:

  newtype Shell a = Shell { runShell :: ErrorT String IO a }

since you&#039;re ignoring the internal Either type from ErrorT.  It is just that you get a throwError that you can use with a String instead of with an IOError?]]></description>
		<content:encoded><![CDATA[<p>Don, </p>
<p>Cool article ;-)  Thanks.</p>
<p>I think that on slide 25:</p>
<p>  instance MonadError IO</p>
<p>should be</p>
<p>  instance MonadError IOError IO</p>
<p>Also, it&#8217;s not clear to me what the ErrorT monad transformer buys you in:</p>
<p>  newtype Shell a = Shell { runShell :: ErrorT String IO a }</p>
<p>since you&#8217;re ignoring the internal Either type from ErrorT.  It is just that you get a throwError that you can use with a String instead of with an IOError?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kevin Jardine</title>
		<link>http://donsbot.wordpress.com/2010/08/17/practical-haskell/#comment-548</link>
		<dc:creator><![CDATA[Kevin Jardine]]></dc:creator>
		<pubDate>Wed, 18 Aug 2010 15:20:17 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=596#comment-548</guid>
		<description><![CDATA[Carlos, try

System.Process]]></description>
		<content:encoded><![CDATA[<p>Carlos, try</p>
<p>System.Process</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: dons00</title>
		<link>http://donsbot.wordpress.com/2010/08/17/practical-haskell/#comment-547</link>
		<dc:creator><![CDATA[dons00]]></dc:creator>
		<pubDate>Wed, 18 Aug 2010 15:08:39 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=596#comment-547</guid>
		<description><![CDATA[The code from the talk is in an earlier post: https://donsbot.wordpress.com/2007/03/10/practical-haskell-shell-scripting-with-error-handling-and-privilege-separation/ (though there&#039;s one tweak: Control.Exception -&gt; Control.OldException).]]></description>
		<content:encoded><![CDATA[<p>The code from the talk is in an earlier post: <a href="https://donsbot.wordpress.com/2007/03/10/practical-haskell-shell-scripting-with-error-handling-and-privilege-separation/" rel="nofollow">https://donsbot.wordpress.com/2007/03/10/practical-haskell-shell-scripting-with-error-handling-and-privilege-separation/</a> (though there&#8217;s one tweak: Control.Exception -&gt; Control.OldException).</p>
]]></content:encoded>
	</item>
</channel>
</rss>
