{"id":227,"date":"2006-11-28T09:32:04","date_gmt":"2006-11-28T09:32:04","guid":{"rendered":"http:\/\/scientopia.org\/blogs\/goodmath\/2006\/11\/28\/haskell-preliminaries-implementations-and-tools\/"},"modified":"2006-11-28T09:32:04","modified_gmt":"2006-11-28T09:32:04","slug":"haskell-preliminaries-implementations-and-tools","status":"publish","type":"post","link":"http:\/\/www.goodmath.org\/blog\/2006\/11\/28\/haskell-preliminaries-implementations-and-tools\/","title":{"rendered":"Haskell Preliminaries: Implementations and Tools"},"content":{"rendered":"<p>Before getting to the meat of the tutorial, I thought it would be good to provide some setup<br \/>\ninformation in a distinct, easy to find place.  This short post will tell you where to find<br \/>\na Haskell implementation and related tools.<\/p>\n<h3>Haskell Implementations<\/h3>\n<p>I&#8217;m testing my examples for these articles using two different Haskell implementations:<\/p>\n<dl>\n<dt><a href=\"http:\/\/www.haskell.org\/hugs\/\">Hugs<\/a><\/dt>\n<dd>A very nice interactive Haskell interpreter. Hugs doesn&#8217;t <em>quite<\/em> implement<br \/>\neverything in the current Haskell specification, but it&#8217;s limits shouldn&#8217;t affect<br \/>\nanything I&#8217;ll cover in this tutorial, and probably won&#8217;t affect any moderate-to-large<br \/>\nsize programs you want to write.<\/dd>\n<dt><a href=\"http:\/\/www.haskell.org\/ghc\">GHC<\/a><\/dt>\n<dd>The Glasgow Haskell Compiler, a high performance optimizing Haskell compiler. GHC implements<br \/>\nevery last bit of the Haskell spec, as well as a bunch of nifty extensions. It&#8217;s also<br \/>\ngot an interactive mode, called <code>ghci<\/code> which is included in its distribution.<br \/>\nGHC is pretty much the gold standard in Haskell implementations.\n<\/dd>\n<\/dl>\n<h3>Editors and Development Environments<\/h3>\n<p> It&#8217;s also good to have some extra tool support for Haskell programming. A lot of editors, such as<br \/>\nemacs, vim, and textmate provide Haskell tooling. The best tooling that I&#8217;ve seen is the <a href=\"http:\/\/eclipsefp.sourceforge.net\/\">EclipseFP<\/a> feature for the <a href=\"http:\/\/www.eclipse.org\">Eclipse<\/a> programming environment. Admittedly, I&#8217;m a bit biased here;<br \/>\nI&#8217;ve used to lead an Eclipse-based research project, so I&#8217;m a huge Eclipse fan. But the Eclipse<br \/>\nHaskell support really is very nice, and it&#8217;s very easy to set up. Installing Eclipse involves<br \/>\nnothing more than downloading it &#8211; it runs very smoothly in-place with no setup; and installing<br \/>\nEclipseFP can be done inside of Eclipse using the update manager &#8211; there&#8217;s a complete step by step<br \/>\nexplanation at the EclipseFP homepage linked above. <\/p>\n<p> If you&#8217;re a visual studio user, there&#8217;s a Haskell package called <a href=\"http:\/\/www.haskell.org\/visualhaskell\/\">Visual Haskell<\/a>. I&#8217;ve never used it (I&#8217;m <em>not<\/em><br \/>\na windows guy; I use MacOS and Linux.), but I&#8217;ve heard quite good things about it.<\/p>\n<p> If you prefer just using a simple text editor, vim includes the Haskell package; for emacs, you<br \/>\ncan get a Haskell mode <a href=\"http:\/\/haskell.org\/haskell-mode\/\">here<\/a>. For TextMate, you can get<br \/>\nthe Haskell bundle via the normal bundle installation route.<\/p>\n<h3> Miscellaneous Tools<\/h3>\n<p> For understanding the execution of Haskell programs, particularly when the laziness gets a bit<br \/>\nconfusing, being able to generate an execution trace can be a huge help. There&#8217;s a tool called <a href=\"http:\/\/www.haskell.org\/hat\/\">Hat<\/a> which can generate very nice, easy to follow traces for<br \/>\nGHC programs.<\/p>\n<p> You can write fancy documentation for Haskell programs using a tool called <a href=\"http:\/\/www.haskell.org\/haddock\/\">Haddock<\/a>. Haddock is something like Javadoc for<br \/>\nHaskell. It piggybacks on a &#8220;literate&#8221; syntax mode built-in to both GHC and Hugs, so<br \/>\nat least primitive support for Haddock is included in all of the Haskell tools; many also<br \/>\nprovide additional Haddock support.<\/p>\n<h3> Other Documentation <\/h3>\n<p> The capital of the online Haskell world is the <a href=\"http:\/\/www.haskell.org\">Haskell.org<\/a> site. It has links to numerous other tutorials, the language spec, implementations, events, etc.<\/p>\n<p> There&#8217;s a Haskell blog called <a href=\"http:\/\/sequence.complete.org\/\">The Complete Sequence<\/a>, which includes a weekly Haskell news update, as well as other interesting articles and links. There&#8217;s another Haskell blog called <a href=\"http:\/\/planet.haskell.org\/\">Planet Haskell<\/a> which also has some good material.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Before getting to the meat of the tutorial, I thought it would be good to provide some setup information in a distinct, easy to find place. This short post will tell you where to find a Haskell implementation and related tools. Haskell Implementations I&#8217;m testing my examples for these articles using two different Haskell implementations: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[89],"tags":[],"class_list":["post-227","post","type-post","status-publish","format-standard","hentry","category-haskell"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p4lzZS-3F","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"http:\/\/www.goodmath.org\/blog\/wp-json\/wp\/v2\/posts\/227","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.goodmath.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.goodmath.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.goodmath.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.goodmath.org\/blog\/wp-json\/wp\/v2\/comments?post=227"}],"version-history":[{"count":0,"href":"http:\/\/www.goodmath.org\/blog\/wp-json\/wp\/v2\/posts\/227\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.goodmath.org\/blog\/wp-json\/wp\/v2\/media?parent=227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.goodmath.org\/blog\/wp-json\/wp\/v2\/categories?post=227"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.goodmath.org\/blog\/wp-json\/wp\/v2\/tags?post=227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}