<?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: Reviving the Gofer Standard Prelude (circa. 1994)</title>
	<atom:link href="http://donsbot.wordpress.com/2009/01/31/reviving-the-gofer-standard-prelude-circa-1994/feed/" rel="self" type="application/rss+xml" />
	<link>http://donsbot.wordpress.com/2009/01/31/reviving-the-gofer-standard-prelude-circa-1994/</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: Doug Quale</title>
		<link>http://donsbot.wordpress.com/2009/01/31/reviving-the-gofer-standard-prelude-circa-1994/#comment-29</link>
		<dc:creator><![CDATA[Doug Quale]]></dc:creator>
		<pubDate>Fri, 13 Feb 2009 16:30:24 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=140#comment-29</guid>
		<description><![CDATA[That makes sense, although then I think strict in Hugs would be the same as $! in Haskell.  This doesn&#039;t match the description of strict that you give since the argument is forced, not the result of the evaluation of the function.]]></description>
		<content:encoded><![CDATA[<p>That makes sense, although then I think strict in Hugs would be the same as $! in Haskell.  This doesn&#8217;t match the description of strict that you give since the argument is forced, not the result of the evaluation of the function.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Don Stewart</title>
		<link>http://donsbot.wordpress.com/2009/01/31/reviving-the-gofer-standard-prelude-circa-1994/#comment-27</link>
		<dc:creator><![CDATA[Don Stewart]]></dc:creator>
		<pubDate>Wed, 11 Feb 2009 22:53:06 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=140#comment-27</guid>
		<description><![CDATA[Yes, it should be:

-- &#124; primitive strict primStrict :: (a -&gt; b) -&gt; a -&gt; b
strict f x = x `GHC.seq` f x]]></description>
		<content:encoded><![CDATA[<p>Yes, it should be:</p>
<p>&#8211; | primitive strict primStrict :: (a -&gt; b) -&gt; a -&gt; b<br />
strict f x = x `GHC.seq` f x</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Doug Quale</title>
		<link>http://donsbot.wordpress.com/2009/01/31/reviving-the-gofer-standard-prelude-circa-1994/#comment-26</link>
		<dc:creator><![CDATA[Doug Quale]]></dc:creator>
		<pubDate>Wed, 11 Feb 2009 22:48:02 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=140#comment-26</guid>
		<description><![CDATA[I think the Haskell definition of gofer&#039;s strict that you use is not correct.

-- &#124; primitive strict primStrict :: (a -&gt; b) -&gt; a -&gt; b
strict f a = let b = f a in b `GHC.seq` b

Neil Mitchell says that &quot;x `seq` x&quot; is a mistake.  See http://neilmitchell.blogspot.com/2008/05/bad-strictness.html]]></description>
		<content:encoded><![CDATA[<p>I think the Haskell definition of gofer&#8217;s strict that you use is not correct.</p>
<p>&#8211; | primitive strict primStrict :: (a -&gt; b) -&gt; a -&gt; b<br />
strict f a = let b = f a in b `GHC.seq` b</p>
<p>Neil Mitchell says that &#8220;x `seq` x&#8221; is a mistake.  See <a href="http://neilmitchell.blogspot.com/2008/05/bad-strictness.html" rel="nofollow">http://neilmitchell.blogspot.com/2008/05/bad-strictness.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Doug Quale</title>
		<link>http://donsbot.wordpress.com/2009/01/31/reviving-the-gofer-standard-prelude-circa-1994/#comment-23</link>
		<dc:creator><![CDATA[Doug Quale]]></dc:creator>
		<pubDate>Tue, 10 Feb 2009 21:24:24 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=140#comment-23</guid>
		<description><![CDATA[Fun stuff, thanks.

It seems to me that the definition of scanl&#039; in gofer was sort of bugged, in that it&#039;s still too lazy to be of any use.  No strictness is actually forced because it&#039;s buried under a lazy cons.

&gt; scanl&#039; (+) 0 [1..] !! 1000000
*** Exception: stack overflow

My understanding is that seq has to be used at the top level of the expression to have effect.
If I use something like this instead

scanl&#039;&#039; f q (x:xs) = y `seq` (q : scanl&#039;&#039; f y xs)
      where y = f q x
scanl&#039;&#039; f q [] = [q]

it works, although this seems a little too eager since we are forcing a value we may never use.]]></description>
		<content:encoded><![CDATA[<p>Fun stuff, thanks.</p>
<p>It seems to me that the definition of scanl&#8217; in gofer was sort of bugged, in that it&#8217;s still too lazy to be of any use.  No strictness is actually forced because it&#8217;s buried under a lazy cons.</p>
<p>&gt; scanl&#8217; (+) 0 [1..] !! 1000000<br />
*** Exception: stack overflow</p>
<p>My understanding is that seq has to be used at the top level of the expression to have effect.<br />
If I use something like this instead</p>
<p>scanl&#8221; f q (x:xs) = y `seq` (q : scanl&#8221; f y xs)<br />
      where y = f q x<br />
scanl&#8221; f q [] = [q]</p>
<p>it works, although this seems a little too eager since we are forcing a value we may never use.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Josef Svenningsson</title>
		<link>http://donsbot.wordpress.com/2009/01/31/reviving-the-gofer-standard-prelude-circa-1994/#comment-12</link>
		<dc:creator><![CDATA[Josef Svenningsson]]></dc:creator>
		<pubDate>Sun, 01 Feb 2009 19:18:44 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=140#comment-12</guid>
		<description><![CDATA[Thanks for this piece of archeology!

Gofer was also my gateway drug leading to Haskell addiction. And you examples bring up some good old memories. In school we had an assignment to write a hangman program in Gofer using the continuation-based IO. I remember it as being quite painful. I&#039;m glad it didn&#039;t scare me away though. Not long after I found a tutorial on monadic IO which was some very welcome news.

It&#039;s funny how the Gofer prelude still has its place somewhere in the back of my head. Even to this day I sometimes look for functions like sum, product and copy in the Haskell Prelude only to find that they aren&#039;t there.

Thanks again.]]></description>
		<content:encoded><![CDATA[<p>Thanks for this piece of archeology!</p>
<p>Gofer was also my gateway drug leading to Haskell addiction. And you examples bring up some good old memories. In school we had an assignment to write a hangman program in Gofer using the continuation-based IO. I remember it as being quite painful. I&#8217;m glad it didn&#8217;t scare me away though. Not long after I found a tutorial on monadic IO which was some very welcome news.</p>
<p>It&#8217;s funny how the Gofer prelude still has its place somewhere in the back of my head. Even to this day I sometimes look for functions like sum, product and copy in the Haskell Prelude only to find that they aren&#8217;t there.</p>
<p>Thanks again.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: RayNbow</title>
		<link>http://donsbot.wordpress.com/2009/01/31/reviving-the-gofer-standard-prelude-circa-1994/#comment-11</link>
		<dc:creator><![CDATA[RayNbow]]></dc:creator>
		<pubDate>Sat, 31 Jan 2009 20:36:01 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=140#comment-11</guid>
		<description><![CDATA[The function `copy` is still in the current Prelude, right? It&#039;s called `replicate`.]]></description>
		<content:encoded><![CDATA[<p>The function `copy` is still in the current Prelude, right? It&#8217;s called `replicate`.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
