https://wiki.haskell.org/api.php?action=feedcontributions&user=PaulJohnson&feedformat=atomHaskellWiki - User contributions [en]2017-02-22T23:10:23ZUser contributionsMediaWiki 1.19.14+dfsg-1https://wiki.haskell.org/HaskellHaskell2009-02-06T14:17:38Z<p>PaulJohnson: Removed spam</p>
<hr />
<div>__NOTOC__<br />
__NOEDITSECTION__<br />
{| border=0 cellspacing=5 cellpadding=10<br />
| valign=top style="text-align:left" bgcolor=#F0F0F0 |<br />
<br />
{{Main/About}}<br />
<br />
{{Main/Learning}}<br />
<br />
{{Main/Libraries}}<br />
<br />
{{Main/Community}}<br />
<br />
|valign=top width=75% style="text-align:left; line-height:120%"|<br />
<br />
{{Main/Intro}}<br />
<br />
{| border=0 cellspacing=0 cellpadding=15<br />
|-<br />
|valign=top width=65% style="text-align:left"|<br />
{{Main/Events}}<br />
<br />
{{Main/Headlines}}<br />
<br />
{{Main/News}}<br />
<br />
<br />
|-<br />
|}<br />
|}</div>PaulJohnsonhttps://wiki.haskell.org/Haskell_logos/New_logo_ideasHaskell logos/New logo ideas2008-12-21T21:11:00Z<p>PaulJohnson: Added adjectives</p>
<hr />
<div>'''The great 2009 Haskell logo contest'''<br />
<br />
The Haskell logo has [http://www.willamette.edu/~fruehr/logos/intro.html changed over time], and the current "new" logo reflects the<br />
advanced features of Haskell. However, it is looking rather dated, and doesn't necessarily reflect the mature Haskell we have now.<br />
<br />
So, time to find a new logo. Something reflecting the modern emphasis of<br />
Haskell on purity and simplicity.<br />
<br />
Please submit logo-sized (not overly large) versions of your logo with optional text, with a preferably white background (such as for use on haskell.org).<br />
<br />
Please submit your entries here, and attach your name to them please. To be eligible,<br />
they will need to be visible on this page (e.g. uploaded, or link to the image). The image should be freely available (a suitable freely distributable license). Entries not displayed here won't be eligible.<br />
<br />
''The deadline for submissions is December 31, 2008, after which the top few submissions will be voted on by the community to decide a winner!''<br />
<br />
<br />
''' Adjectives '''<br />
<br />
<br />
A logo is part of a brand, and a brand is used to project an image. Therefore an important part of this exercise is deciding what image we want to project. An image can be described using a list of adjectives. So here is a sample of adjectives that we might want. This list is not exhaustive: by all means add more if you want them.<br />
<br />
''abstract, academic, accessible, accurate, adventurous, business-like, communal, complicated, dangerous, different, easy, exciting, familiar, friendly, fun, fuzzy, hard, interesting, inventive, precise, productive, profitable, reliable, revolutionary, safe, simple, strange, supportive, warm, welcoming.''<br />
<br />
I suggest that entries are accompanied by the two or three adjectives they are trying to project. [[User:PaulJohnson|PaulJohnson]]<br />
<br />
----<br />
[[Image:lambdanimal.png|150px]]<br />
[[Image:lambdanimal_nomane.png|150px]]<br />
<br />
Strange Lambdanimal, with or without a mane. [[Media:lambdanimal.svg|SVG (inkscape)]].<br />
<br />
by [[User:Ripounet|Ripounet]] 22:24, 18 December 2008 (UTC)<br />
<br />
----<br />
[http://galois.com/~dons/images/logos/Haskell_logo.png http://galois.com/~dons/images/logos/Haskell_logo.png]<br />
<br />
Dana Herz @ Galois.<br />
<br />
----<br />
[[Image:Haskell-tao.png|Haskell as Taoism]]<br />
<br />
Playing off a recent Haskell-Cafe thread, in which programming languages were compared to religions, and Haskell was equated to Taoism. The slogan makes at least a ''little'' sense: it obviously goes with the logo, and 'Duals' are important to Cat theory, which influences Haskell strongly. [[Media:Haskell-tao.svg|SVG]] available. Font is Lucida Calligraphic, a less ubiquitous calligraphic font might be better.<br />
<br />
--[[User:Rgreayer|Rgreayer]] 15:16, 18 December 2008 (UTC)<br />
----<br />
[[Image:unsafeHaskell.png]]<br />
[[User:Beelsebob|Beelsebob]] 09:09, 18 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:haskell-cjay2.png]]<br />
[[User:Cjay|cjay]] 03:49, 18 December 2008 (UTC)<br />
<br />
<br />
[[Image:haskell-cjay2a.png]]<br />
[[User:Cjay|cjay]] 14:27, 18 December 2008 (UTC)<br />
<br />
<br />
[[Image:haskell-cjay2b.png]]<br />
[[User:Cjay|cjay]] 03:22, 19 December 2008 (UTC)<br />
<br />
<br />
[[Image:haskell-cjay2c.png]]<br />
[[User:Cjay|cjay]] 23:03, 19 December 2008 (UTC)<br />
<br />
<br />
Available as svg [[Media:Haskell-cjay2.svg|1]] [[Media:Haskell-cjay2a.svg|2]] [[Media:Haskell-cjay2b.svg|3]] [[Media:Haskell-cjay2c.svg|4]] (inkscape). Fonts: FreeSerif for lambda, >> and the arrow head; Impact Label for "Haskell" (1&2), SF Alien Encounters Solid (3) (all free).<br />
<br />
----<br />
<br />
My attempt at a new Haskell logo:<br />
<br />
[[Image:Haskell_jdr.png]]<br />
<br />
So I guess the standalone version would then be:<br />
<br />
[[Image:Haskell_h_jdr.png]]<br />
<br />
[http://www.voetsjoeba.com Jeroen De Ridder]<br />
<br />
----<br />
<br />
[http://galois.com/~dons/images/logo-3-curved.png http://galois.com/~dons/images/logo-3-curved.png]<br />
<br />
[http://article.gmane.org/gmane.comp.lang.haskell.cafe/49072 George Pollard]<br />
<br />
----<br />
<br />
[[Image:Jeff-heard-1.png]]<br />
<br />
[http://thread.gmane.org/gmane.comp.lang.haskell.cafe/48892/focus=48893 Jeff Heard]. <br />
<br />
----<br />
<br />
Here's an attempt to depict the polish, elegance, and purity of Haskell by merging the H and lambda into an iconic gem.<br />
<br />
[[Image:Haskell2v3.png]]<br />
<br />
Made in Inkscape, with an SVG available.<br />
<br />
--[[User:Chromakode|Chromakode]] 03:18, 17 December 2008 (UTC)<br />
<br />
:I love that one, hope it wins. But I can't see the lambda merged in it, where is it hidden? [[User:Ripounet|Ripounet]]<br />
<br />
:Thanks for your comment. :)<br />
:The light blue highlight of the H is in the shape of an abstract lambda. [[User:Chromakode|Chromakode]]<br />
<br />
----<br />
<br />
All credit goes to Darrin Thompson for posting the ASCII inspiration for this to haskell-cafe. I, Jeff Wheeler, just mocked it up to look<br />
pretty. Here are two interpretations:<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo1.png http://media.nokrev.com/junk/haskell-logos/logo1.png]<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo2.png http://media.nokrev.com/junk/haskell-logos/logo2.png]<br />
<br />
Two with rounded edges:<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo8.png http://media.nokrev.com/junk/haskell-logos/logo8.png]<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo9.png http://media.nokrev.com/junk/haskell-logos/logo9.png]<br />
<br />
Here's a icon-sized version:<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo4.png http://media.nokrev.com/junk/haskell-logos/logo4.png]<br />
<br />
The first two without an background:<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo6.png http://media.nokrev.com/junk/haskell-logos/logo6.png] [http://media.nokrev.com/junk/haskell-logos/logo7.png http://media.nokrev.com/junk/haskell-logos/logo7.png]<br />
<br />
--[[User:Jeffwheeler|Jeffwheeler]] 02:42, 17 December 2008 (UTC)<br />
----<br />
Mix and match<br />
<br />
[http://relapse-software.net/haskell_7.png http://relapse-software.net/haskell_7.png]<br />
----<br />
More mix and match, borrowing bind-lambda icon, star/flower idea, and font/verbiage from other submissions...(Raspoutine Classic font, [[Media:Haskell-Symstar.svg|SVG]] available).<br />
[[Image:Haskell-Symstar.png|Haskell - Logo variant]]<br />
<br />
--[[User:Rgreayer|Rgreayer]] 21:39, 17 December 2008 (UTC)<br />
----<br />
I really like the logo above. Here are some variations. The font name is ModeNine.<br />
<br />
<br />
[[Image:Haskellvariations1.jpg|Haskell - Logo Variations A]]<br />
<br />
[[Image:Haskellvariations2.jpg|Haskell - Logo Variations B]]<br />
<br />
--[[User:Reified|Reified]] 14:48, 17 December 2008 (UTC)<br />
<br />
----<br />
<br />
A different logo idea, using toddler's letter blocks to convey the simplicity of Haskell. Exact block look and font used can be changed,<br />
but this is the basic idea.<br />
<br />
[[Image:Haskell_logo_ideas_4_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 23:29, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Stupidb123logo.jpg]]<br />
<br />
--[[User:Stupidb123|Stupidb123]] 12:40, 16 December 2008 (UTC)<br />
<br />
----<br />
"The lightbulb lady" (concept: a lady/lightbulb made out of an inverted lambda, hope it catches...).<br />
Font: Museo Sans 500 (free of charge, add to the cart [http://new.myfonts.com/fonts/exljbris/museo-sans/500/ here]).<br />
<br />
[[Image:The_lady.png]]<br />
<br />
-- [[User:eu-prleu-peupeu]]<br />
----<br />
Just another version of the initial spreadshirt variant. <br />
The black background is now part of the logo. The text should be optional.<br />
<br />
[[Image:haskell_spreadshirt_logo.png|400px]]<br />
<br />
[[User:Frosch03|Frosch03]] 11:41, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
Made with Inkscape. The source in SVG is available [http://www.gburri.org/bordel/logo_haskell_gburri.svg here].<br />
<br />
Font : [http://www.dafont.com/raspoutine.font?nb_ppp=50&text=Haskell Raspoutine (free)].<br />
<br />
[[Image:haskel_logo_preview_gburri.png]]<br />
<br />
[[User:Gburri|Gburri]] 09:58, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
Lambdas in a circle, forming a flower. I wanted it to be easy to draw, be subtle and look nice for haskellers and non-haskellers alike. Created in inkscape using free fonts.<br />
<br />
[[Image:Haskell-flower3.png]]<br />
<br />
--[[User:Tanimoto|tanimoto]] 05:39, 19 December 2008 (UTC)<br />
<br />
----<br />
<br />
A different take on the lambda-in-a-circle logo that looks less like the Half Life logo. Probably fits better than the monadic sequence<br />
operator in my other submission.<br />
<br />
[[Image:Haskell_logo_ideas_2_falconnl.png]]<br />
<br />
Update:<br />
Slight change and added letters, this time in the free Fonce Sans [http://liquisoft.deviantart.com/art/Fonce-Sans-Regular-Trial-25092730]<br />
font. I like Officina better, but if the font has to be free this is a reasonable substitute.<br />
<br />
[[Image:Haskell_logo_idea_3_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 08:34, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
Very quick attempt:<br />
<br />
[[Image:BurkeLibbey_Haskell.png]]<br />
<br />
The main font is [http://www.josbuivenga.demon.nl/diavlo.html Diavlo] (free). The lambda is in Candara, which I believe ships with Vista<br />
and/or XP. Not sure of the licensing there. If there's significant interest in this, I'll redo it as a vector graphic.<br />
<br />
-- [[User:Burke|Burke]] 02:33, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
On behalf of the Ministry of Safety and Happiness I would like to promote the meme suggesting that Haskell is the programming language of<br />
choice for the Illuminati.<br />
<br />
[[Image:Haskell proceed.png]]<br />
<br />
--[[User:CznpyHrnjwczky|CznpyHrnjwczky]] 05:31, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
More of a mascotte, though she could be used in a logo as well.<br />
<br />
This is Monica Monad, and she's a Warm Fuzzy Thing. Just giving a face to SPJ's alternative name for monads :)<br />
<br />
Her main purpose would be to present tutorials.<br />
<br />
[[Image:Monica_monad_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 00:52, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
A slightly different take on the Haskell logo, as the lambda-in-a-circle looks a bit too much like the Half Life logo for my taste. This<br />
one references monads instead of lambda calculus. Three possible slogans, emphasizing the fun that comes from programming in Haskell.<br />
Number 2 and 3 also reference function composition. Number 3 is my personal favourite.<br />
<br />
[[Image:Haskell_logo_ideas_falconnl.png]]<br />
<br />
Update: a combination of my two logos on a t-shirt. This time with function arrows to indicate the causal relationships: because Haskell is<br />
pure, it's simple. Because it's simple, it's fun.<br />
<br />
[[Image:Haskell_logo_ideas_tshirt_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 22:58, 15 December 2008 (GMT +1)<br />
<br />
: Yummy. What's the font? Is it free? [[User:Porges|Porges]] 21:59, 15 December 2008 (UTC)<br />
: Unfortunately, no. The font is called Officina Sans. Is that a problem? [[User:FalconNL|FalconNL]] 00:02, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
Simple, clean:<br />
<br />
[http://hpsg.fu-berlin.de/~rsling/img/haskell-shirt.jpeg http://hpsg.fu-berlin.de/~rsling/img/haskell-shirt.jpeg]<br />
<br />
I really like this t-shirt logo, by the way. Gets my vote so far. — [[User:Chrisdone|Chrisdone]] 00:18, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
Minor tweak to the above:<br />
<br />
[[Image:HaskellLogo-v2.png]]<br />
<br />
----<br />
<br />
Minor modification of the t-shirt logo, the lambda was a bit skewed in my opinion:<br />
<br />
[[Image:tshirt-logo-mod.png]]<br />
<br />
And another modification of the same theme:<br />
<br />
[[Image:tshirt-logo-mod-inv.png]]<br />
<br />
--[[User:Sebastiaan|Sebastiaan]] 13:29, 15 December 2008 (UTC)<br />
: I really like this one. A font other than Arial would be nice ;) [[User:Porges|Porges]] 21:25, 15 December 2008 (UTC)<br />
<br />
[[Image:HaskellLogoTShirtWhite.png]] -- [[User:Chrisdone|Chrisdone]] 23:19, 15 December 2008 (UTC)<br />
<br />
<br />
<br />
----<br />
<br />
Some ideas. Supposed to resemble a lambda abstraction. I realise there are no formal parameters. ---- [[User:Chrisdone|Chrisdone]] 00:12,<br />
15 December 2008 (UTC)<br />
<br />
[http://chrisdone.com/haskell-blah.png http://chrisdone.com/haskell-blah-thumb.png]<br />
<br />
----<br />
<br />
Here's another one; lambda is Gentium SIL, Haskell is MgOpen Cosmetica, tagline is MgOpen Canonica Italic. [[User:Porges|Porges]] 21:25, 15<br />
December 2008 (UTC)<br />
<br />
[[Image:Haskell Logo.png]]<br />
<br />
----<br />
<br />
Another take. A bit simpler, more symmetrical.<br />
<br />
[[Image:haskelllogobeshers.png]]<br />
<br />
----<br />
<br />
[[Image:Haskell-logo.png]]<br />
<br />
The logo uses Kautiva Bold as (non-free) font.<br />
<br />
--[[User:Eelco|Eelco]] 07:43, 15 December 2008 (UTC)<br />
<br />
This one is dedicated to Derek Elkins, to sooth his eyes after having them hurt on the previous logo:<br />
<br />
[[Image:Haskell-logo-funny.png]]<br />
<br />
--[[User:Eelco|Eelco]] 08:53, 15 December 2008 (UTC)<br />
: Makes sense. Comic Sans is the *Official Font of Haskell*, after all.<br />
<br />
----<br />
[[Image:HaskellLogoTDavie.png]]<br />
<br />
[[Image:HaskellLogoTDavie.pdf]] (vector pdf version)<br />
<br />
[[Image:HaskellLogoTDavie2.png]]<br />
<br />
[[User:Beelsebob|Beelsebob]] 08:32, 15 December 2008 (UTC)<br />
<br />
---- <br />
<br />
[http://relapse-software.net/haskell_0.png http://relapse-software.net/haskell_0.png]<br />
<br />
[http://relapse-software.net/haskell_1.png http://relapse-software.net/haskell_1.png]<br />
<br />
----<br />
<br />
[http://relapse-software.net/haskell_5.png http://relapse-software.net/haskell_5.png]<br />
<br />
<br />
[http://relapse-software.net/haskell_2.png http://relapse-software.net/haskell_2.png]<br />
<br />
[http://relapse-software.net/haskell_3.png http://relapse-software.net/haskell_3.png]<br />
<br />
----<br />
<br />
Logo fun using Blender:<br />
<br />
[[Image:HsLogosMB.png|center|Haskell Logo idea with lambda as mascot]]<br />
<br />
I tried to give the lambda sign an ''alive'' feeling. --[[User:GokhanSan|GokhanSan]] 12:49, 15 December 2008 (UTC)<br />
: Middle one looks a bit too much like the ghostbusters logo :D [[User:Porges|Porges]] 21:25, 15 December 2008 (UTC)<br />
:: Hmm, I wonder if it's the choice of colors. Then again, with a minor alteration, we get a FreeBSD icon candidate:<br />
[[Image:HsLogoMB-BSD.png|beastie]] ;-) --[[User:GokhanSan|GokhanSan]] 08:52, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:HaskellLogoIdea05.gif]]<br />
<br />
Not sure about the colour. I tried to pick the purple from the current logo. Although the lower lambda is rotated there is<br />
[http://poinikastas.csad.ox.ac.uk/browseGlyphs.shtml historic precedence] for other forms of the letter. The lambda takes the angle from<br />
the 'k'. Font is News Gothic. Feel free to play with the concept. [[User:Rk|Rk]] 11:13, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
<br />
More vectorial Haskell logo concepts. Using inkscape and the popular [http://inde-graphics.deviantart.com/art/advent-font-57338302 advent<br />
font] (CC at-nc-nd).<br />
<br />
[[Image:Haskell_infinitylambda.png]]<br />
[[Image:Haskell_halfhalfinfinitylambda.png]]<br />
[[Image:Haskell_3qhalfinfinitylambda.png]]<br />
<br />
Vectorial images (svg):<br />
<br />
[http://haskell.org/sitewiki/images/8/86/Haskell_infinitylambda.svg 1]<br />
[http://haskell.org/sitewiki/images/d/df/Haskell_halfinfinitylambda.svg 2]<br />
[http://haskell.org/sitewiki/images/6/66/Haskell_3qhalfinfinitylambda.svg 3]<br />
<br />
* [[User:alvivi|alvivi]] 19:28, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Haskell-pure.png|haskell::pure]]<br />
<br />
--[[User:Rgreayer|Rgreayer]] 20:44, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
Find a font where 'k' looks like a reverse lambda (after removing the "stalk"). For example:<br />
<br />
[[Image:Kaskell.png|Kaskell]]<br />
<br />
Note this example uses Monotype Corsiva which is not a free font. If the basic approach looks good, we can find a similar free font that<br />
works.<br />
<br />
--[[User:Orenbenkiki|OrenBenKiki]] 01:40, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Haskell.png|Haskellll]]<br />
<br />
Illustrator, vector art available, apologies to GokhanSan<br />
<br />
--[[User:Mpeter|Mpeter]] 10:18, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
<br />
[http://relapse-software.net/haskell_6.png http://relapse-software.net/haskell_6.png]<br />
<br />
----<br />
<br />
[[Image:Haskell3.png|Haskell]]<br />
[[Image:Haskell4.png|Haskell]]<br />
<br />
Inkscape, vector art available.<br />
<br />
--[[User:Chromakode|Chromakode]] 07:14, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
I'll probably regret this...<br />
<br />
[[Image:NarleyYeeaaahh.jpg|Haskell - Narwals, YEEAAAAHH!!]]<br />
<br />
(Created with PAINT.NET)<br />
<br />
--[[User:Reified|Reified]] 07:20, 16 December 2008 (UTC)<br />
:It's a fun one but I erroneously read " Chaskell YEEAAAHH!! " [[User:Ripounet|Ripounet]]<br />
----<br />
<br />
The general idea is that it's just "Haskell" but with w lambda instead of the a. The font here is Myriad Pro but this would work with any<br />
good sans-serif font. It's color-agnostic, so it can be easily printer, presented as white on black or changed to a different color.<br />
<br />
[[Image:Haskell_logo_bonus.png]]<br />
<br />
[[Image:Haskell_logo_bonus2.png]]<br />
<br />
--[[User:BONUS|BONUS]] 14:40, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Axman6-logo-1.0.png]]<br />
<br />
In black:<br />
<br />
[[Image:Axman6-logo-1.1.png]]<br />
<br />
[[Image:Axman6-logo-1.1-small.png]]<br />
<br />
--[[User:Axman6|Axman6]] 15:16, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Haskell_girl.jpg]]<br />
<br />
<br />
Oh, didn't know png's would work.<br />
--[[User:Tindrum|Tindrum]] 17:12, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Haskell_logo.png]]<br />
<br />
It is mutually recursive...<br />
Here is the [[Media:Haskell logo.svg|svg]].<br />
<br />
Second version:<br />
<br />
[[image:Haskell2_logo.png]]<br />
<br />
And the [[Media:Haskell2 logo.svg|svg]].<br />
<br />
--[[User:Trontonic|Trontonic]] 20:39, 16 December 2008 (UTC)<br />
<br />
----<br />
This is a variation on my [http://t-shirts.cafepress.com/item/lambda-revolution-fitted-tshirt/96543210 Cafepress t-shirt]. The PNG is<br />
generated from an Inkscape SVG.<br />
<br />
[[Image:Haskell-logo-revolution.png]]<br />
<br />
Adjectives: revolutionary<br />
<br />
[[User:PaulJohnson|PaulJohnson]] 21:08, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:haskell-cjay.png]]<br />
<br />
Available as [[Media:Haskell-cjay.svg|svg]] (inkscape). Fonts: FreeSerif for lambda and >>. Bitstream Vera and FreeMono for other (afaik<br />
all free to use)<br />
<br />
[[User:Cjay|cjay]] 22:45, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
http://conal.net/Pan/Gallery/haskell-powered%20on%20white%20tiled%20360.png<br />
<br />
One I made with [http://conal.net/Pan/Gallery Pan] (purely functional image synthesis in Haskell) some years back. See also the<br />
[http://conal.net/Pan/Gallery/haskell-powered%20on%20white%20tiled%20720.png 720 square version]. I have a few sizes up to 2250 pixels<br />
square.<br />
<br />
[[User:Conal|Conal]] 03:40, 17 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Haskell_lambda.png]]<br />
<br />
Just kidding :P<br />
<br />
--[[User:Trontonic|Trontonic]] 05:04, 17 December 2008 (UTC)<br />
<br />
----<br />
=== Cale Gibbard ===<br />
[[Image:Haskell-logo-6up.png]]<br />
<br />
[http://haskell.org/haskellwiki/Image:Haskell-logo-6up.svg Inkscape SVG]<br />
<br />
I originally had no specific mountain in mind, but Don Stewart pointed out that this might be representative of Mt. Hood in Portland, Oregon, where Haskell was named.<br />
<br />
Regardless, I thought a summit, bathed in the pure mountain air would be a decent symbol for Haskell, the peak of contemporary programming. :)<br />
<br />
[[User:CaleGibbard|CaleGibbard]] 05:55, 17 December 2008 (UTC)<br />
:Here's a modified version with a slightly funkier font :) I think that it matches the lines of the image better... [[User:Porges|Porges]] 03:14, 18 December 2008 (UTC)<br />
<br />
[[Image:Testhask.png]]<br />
----<br />
<br />
Probably not a good choice for a logo:<br />
<br />
[[Image:Hazard lambda cracked 2.png]]<br />
<br />
----<br />
<br />
[[Image:Haskell_Ribbons.png]]<br />
<br />
[http://slipgate.za.net/~korpse/misc/Haskell_Ribbons.svg SVG]<br />
<br />
Simplicity.<br />
<br />
(It is possible that the font may need to be replaced with a free alternative.)<br />
<br />
[[User:Jonathanj|JonathanJ]] 16:34, 17 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Haskelllogosmax.png]]<br />
<br />
Available as SVG.<br />
<br />
[[User:MaxRabkin|MaxRabkin]] 05:37, 18 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:DoHaskell.png]]<br />
<br />
Another variation for the cognicenti:<br />
<br />
[[Image:JustHaskell.png]]<br />
<br />
--[[User:Warren|Warren]] 07:26, 18 December 2008 (UTC)<br />
<br />
----<br />
<br />
A slight variation of the ">\=" logo:<br />
<br />
[[Image:haskell-logo-doublef.png]]<br />
<br />
Not that it's worth much:). Available as [[Media:haskell-logo-doublef.svg|SVG]].<br />
<br />
[[User:Doublef|DoubleF]] 07:36, 18 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:haskell-apankrat.png]]<br />
<br />
The idea for this [http://en.wikipedia.org/wiki/Wordmark_(graphic_identity) wordmark] is to modify ''A'' to resemble λ and through this tie together the "Haskell" to the "Lambda". Modified ''A'' also works well as a standalone logo:<br />
<br />
[[Image:haskell-symbol-apankrat.png]]<br />
<br />
Note that ''any'' logo based on the unmodified λ symbol may look ambiguous to the people outside of Haskell community. While the λ in the context of programming languages is clearly associated with functional programming, it ''is'' a lowercase Greek L and so it's reasonable for an outsider to associate it with '''L'''isp, and not Haskell.<br />
<br />
PS. I just scrolled up and saw BONUS'es entry (14:40, 16 December 2008). While its idea is close, I think using pure λ in place of an A doesn't work because it effectively turn the name into H-L-skell.<br />
<br />
[[User:Apankrat|Apankrat]] 07:38, 18 December 2008 (UTC)<br />
<br />
<br />
----<br />
A very simple logo, made with inkscape, using math fonts, with various grades (B&W, grays, fill color & gradient) and backgrounds<br />
[[Image:Simple_haskell.png]]<br />
<br />
SVG available here:<br />
[[Image:Simple haskell.svgz]]<br />
<br />
[[User:Aubanel|Aubanel]] 18:08, 18 December 2008 (UTC)<br />
<br />
<br />
<br />
----<br />
<br />
[[Image:g3634.png]]<br />
<br />
Available as Inkscape [[Media:dessin.svg|SVG]]<br />
<br />
[[Image:g4441.png]]<br />
<br />
Available as Inkscape [[Media:dessin2.svg|SVG]]<br />
<br />
[[User:runrun|runrun]] 18 December 2008<br />
<br />
----<br />
<br />
[[Image:Haskell-logo2-max.png]]<br />
<br />
Contact me for SVG. Font is not currently free, but I designed it, so this can change if it becomes "the Haskell font". I think it shows some of the elegance that Haskell has. If you like the font but can put it with a better logo, go ahead. --[[User:MaxRabkin|MaxRabkin]] 04:53, 19 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:sgf.png]]<br />
<br />
I think the best way to represent the pure, functional nature of Haskell is with a pure and functional logo! Something modernist, minimalist, clean and simple. I'd prefer not to put highlights of the language's syntax in the logo - that's remarkably concrete for a language good at abstraction. Even lambdas etc. should be slightly hidden - those who know what it's about can see them, and everyone else doesn't think 'what's that funny symbol?'. For the font, again, something functional like a light Helvetica or Univers.<br />
<br />
So, I thought I'd have a go at a few variations. I'm not convinced it's worked, but there you go. I've shamelessly ripped off tanimoto's idea. [[User:Sgf|Sgf]] 08:13, 19 December 2008 (UTC)<br />
<br />
* Sgf, I really like your logos and I think you captured my idea much better than I could do. I especially like the red one, a bit Escher-esque. I wonder if we could turn the blue one into something that looks more like a snowflake than it currently does. Thanks. [[User:Tanimoto|tanimoto]] 10:43, 19 December 2008 (UTC)<br />
<br />
* I also like the blue and the red logo. The resemblance of a snowflake fits the purity of the language. Perhaps you could give the lambda's more volume to make it more plate-like? [[User:Felix|Felix]]<br />
<br />
* Thanks for the comments. I'm going to be offline for about a week, so I'm not going to have a chance to knock up further variations soon, much as I would like to. So, if you have the time, feel free to generate variations from the [[Media:sgf.svg|Inkscape SVG]]. Otherwise, I'll have a go when I get back. Cheers, [[User:Sgf|Sgf]] 01:48, 20 December 2008 (UTC)<br />
<br />
[[Image:Sgf-logo-blue.png|Sgf-logo-blue]]<br />
<br />
Sgf's red logo changed to blue and with the Fonce Sans font that FalconNL has used for another logo. [[User:Felix|Felix]] 2008-12-21<br />
<br />
And another variation of Sgf's logo, this time using negative instead of positive space.<br />
<br />
[[Image:Haskell_logo_ideas_5_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 18:13, 21 December 2008 (UTC)<br />
<br />
----<br />
<br />
λλλ<br />
<br />
Haskell The Revenge of the Nerds<br />
<br />
---<br />
<br />
http://www.haskells.com/images/logo.gif<br />
<br />
---<br />
<br />
[[Image:Ouroborous-oval.png|Ouroboros oval]]<br />
<br />
Paulo Tanimoto on the mailing list suggested something based on [http://www.example.com Orouboros]. Here is the [[Media:Ouroborous-oval.svg|Inkscape SVG]].<br />
<br />
Adjectives: abstract, friendly<br />
<br />
[[User:PaulJohnson|PaulJohnson]]<br />
<br />
----<br />
<br />
How about using one of the mythical birds in lambda calculus? Specifically, the ones from the article [http://users.bigpond.net.au/d.keenan/Lambda/ To Dissect a Mockingbird]. Some of the examples:<br />
<br />
http://users.bigpond.net.au/d.keenan/Lambda/Graphical_lambda2.gif (Mockingbird)<br />
<br />
http://users.bigpond.net.au/d.keenan/Lambda/Graphical_lambda6.gif (Omega bird)<br />
<br />
http://users.bigpond.net.au/d.keenan/Lambda/Graphical_lambda15.gif<br />
<br />
Since Haskell is centered around the idea of lambdas, I thought this would be a cool idea. Plus, they have qualities similar to Haskell: exotic, mysterious, abstract... [[User:Aviator|Aviator]] 12:35, 21 December 2008 (UTC)</div>PaulJohnsonhttps://wiki.haskell.org/Haskell_logos/New_logo_ideasHaskell logos/New logo ideas2008-12-21T12:22:06Z<p>PaulJohnson: Fixed link to SVG and credited Paulo Tanimoto with the idea.</p>
<hr />
<div>'''The great 2009 Haskell logo contest'''<br />
<br />
The Haskell logo has [http://www.willamette.edu/~fruehr/logos/intro.html changed over time], and the current "new" logo reflects the<br />
advanced features of Haskell. However, it is looking rather dated, and doesn't necessarily reflect the mature Haskell we have now.<br />
<br />
So, time to find a new logo. Something reflecting the modern emphasis of<br />
Haskell on purity and simplicity.<br />
<br />
Please submit logo-sized (not overly large) versions of your logo with optional text, with a preferably white background (such as for use on haskell.org).<br />
<br />
Please submit your entries here, and attach your name to them please. To be eligible,<br />
they will need to be visible on this page (e.g. uploaded, or link to the image). The image should be freely available (a suitable freely distributable license). Entries not displayed here won't be eligible.<br />
<br />
''The deadline for submissions is December 31, 2008, after which the top few submissions will be voted on by the community to decide a winner!''<br />
<br />
<br />
----<br />
[[Image:lambdanimal.png|150px]]<br />
[[Image:lambdanimal_nomane.png|150px]]<br />
<br />
Strange Lambdanimal, with or without a mane. [[Media:lambdanimal.svg|SVG (inkscape)]].<br />
<br />
by [[User:Ripounet|Ripounet]] 22:24, 18 December 2008 (UTC)<br />
<br />
----<br />
[http://galois.com/~dons/images/logos/Haskell_logo.png http://galois.com/~dons/images/logos/Haskell_logo.png]<br />
<br />
Dana Herz @ Galois.<br />
<br />
----<br />
[[Image:Haskell-tao.png|Haskell as Taoism]]<br />
<br />
Playing off a recent Haskell-Cafe thread, in which programming languages were compared to religions, and Haskell was equated to Taoism. The slogan makes at least a ''little'' sense: it obviously goes with the logo, and 'Duals' are important to Cat theory, which influences Haskell strongly. [[Media:Haskell-tao.svg|SVG]] available. Font is Lucida Calligraphic, a less ubiquitous calligraphic font might be better.<br />
<br />
--[[User:Rgreayer|Rgreayer]] 15:16, 18 December 2008 (UTC)<br />
----<br />
[[Image:unsafeHaskell.png]]<br />
[[User:Beelsebob|Beelsebob]] 09:09, 18 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:haskell-cjay2.png]]<br />
[[User:Cjay|cjay]] 03:49, 18 December 2008 (UTC)<br />
<br />
<br />
[[Image:haskell-cjay2a.png]]<br />
[[User:Cjay|cjay]] 14:27, 18 December 2008 (UTC)<br />
<br />
<br />
[[Image:haskell-cjay2b.png]]<br />
[[User:Cjay|cjay]] 03:22, 19 December 2008 (UTC)<br />
<br />
<br />
[[Image:haskell-cjay2c.png]]<br />
[[User:Cjay|cjay]] 23:03, 19 December 2008 (UTC)<br />
<br />
<br />
Available as svg [[Media:Haskell-cjay2.svg|1]] [[Media:Haskell-cjay2a.svg|2]] [[Media:Haskell-cjay2b.svg|3]] [[Media:Haskell-cjay2c.svg|4]] (inkscape). Fonts: FreeSerif for lambda, >> and the arrow head; Impact Label for "Haskell" (1&2), SF Alien Encounters Solid (3) (all free).<br />
<br />
----<br />
<br />
My attempt at a new Haskell logo:<br />
<br />
[[Image:Haskell_jdr.png]]<br />
<br />
So I guess the standalone version would then be:<br />
<br />
[[Image:Haskell_h_jdr.png]]<br />
<br />
[http://www.voetsjoeba.com Jeroen De Ridder]<br />
<br />
----<br />
<br />
[http://galois.com/~dons/images/logo-3-curved.png http://galois.com/~dons/images/logo-3-curved.png]<br />
<br />
[http://article.gmane.org/gmane.comp.lang.haskell.cafe/49072 George Pollard]<br />
<br />
----<br />
<br />
[[Image:Jeff-heard-1.png]]<br />
<br />
[http://thread.gmane.org/gmane.comp.lang.haskell.cafe/48892/focus=48893 Jeff Heard]. <br />
<br />
----<br />
<br />
Here's an attempt to depict the polish, elegance, and purity of Haskell by merging the H and lambda into an iconic gem.<br />
<br />
[[Image:Haskell2v3.png]]<br />
<br />
Made in Inkscape, with an SVG available.<br />
<br />
--[[User:Chromakode|Chromakode]] 03:18, 17 December 2008 (UTC)<br />
<br />
:I love that one, hope it wins. But I can't see the lambda merged in it, where is it hidden? [[User:Ripounet|Ripounet]]<br />
<br />
:Thanks for your comment. :)<br />
:The light blue highlight of the H is in the shape of an abstract lambda. [[User:Chromakode|Chromakode]]<br />
<br />
----<br />
<br />
All credit goes to Darrin Thompson for posting the ASCII inspiration for this to haskell-cafe. I, Jeff Wheeler, just mocked it up to look<br />
pretty. Here are two interpretations:<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo1.png http://media.nokrev.com/junk/haskell-logos/logo1.png]<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo2.png http://media.nokrev.com/junk/haskell-logos/logo2.png]<br />
<br />
Two with rounded edges:<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo8.png http://media.nokrev.com/junk/haskell-logos/logo8.png]<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo9.png http://media.nokrev.com/junk/haskell-logos/logo9.png]<br />
<br />
Here's a icon-sized version:<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo4.png http://media.nokrev.com/junk/haskell-logos/logo4.png]<br />
<br />
The first two without an background:<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo6.png http://media.nokrev.com/junk/haskell-logos/logo6.png] [http://media.nokrev.com/junk/haskell-logos/logo7.png http://media.nokrev.com/junk/haskell-logos/logo7.png]<br />
<br />
--[[User:Jeffwheeler|Jeffwheeler]] 02:42, 17 December 2008 (UTC)<br />
----<br />
Mix and match<br />
<br />
[http://relapse-software.net/haskell_7.png http://relapse-software.net/haskell_7.png]<br />
----<br />
More mix and match, borrowing bind-lambda icon, star/flower idea, and font/verbiage from other submissions...(Raspoutine Classic font, [[Media:Haskell-Symstar.svg|SVG]] available).<br />
[[Image:Haskell-Symstar.png|Haskell - Logo variant]]<br />
<br />
--[[User:Rgreayer|Rgreayer]] 21:39, 17 December 2008 (UTC)<br />
----<br />
I really like the logo above. Here are some variations. The font name is ModeNine.<br />
<br />
<br />
[[Image:Haskellvariations1.jpg|Haskell - Logo Variations A]]<br />
<br />
[[Image:Haskellvariations2.jpg|Haskell - Logo Variations B]]<br />
<br />
--[[User:Reified|Reified]] 14:48, 17 December 2008 (UTC)<br />
<br />
----<br />
<br />
A different logo idea, using toddler's letter blocks to convey the simplicity of Haskell. Exact block look and font used can be changed,<br />
but this is the basic idea.<br />
<br />
[[Image:Haskell_logo_ideas_4_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 23:29, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Stupidb123logo.jpg]]<br />
<br />
--[[User:Stupidb123|Stupidb123]] 12:40, 16 December 2008 (UTC)<br />
<br />
----<br />
"The lightbulb lady" (concept: a lady/lightbulb made out of an inverted lambda, hope it catches...).<br />
Font: Museo Sans 500 (free of charge, add to the cart [http://new.myfonts.com/fonts/exljbris/museo-sans/500/ here]).<br />
<br />
[[Image:The_lady.png]]<br />
<br />
-- [[User:eu-prleu-peupeu]]<br />
----<br />
Just another version of the initial spreadshirt variant. <br />
The black background is now part of the logo. The text should be optional.<br />
<br />
[[Image:haskell_spreadshirt_logo.png|400px]]<br />
<br />
[[User:Frosch03|Frosch03]] 11:41, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
Made with Inkscape. The source in SVG is available [http://www.gburri.org/bordel/logo_haskell_gburri.svg here].<br />
<br />
Font : [http://www.dafont.com/raspoutine.font?nb_ppp=50&text=Haskell Raspoutine (free)].<br />
<br />
[[Image:haskel_logo_preview_gburri.png]]<br />
<br />
[[User:Gburri|Gburri]] 09:58, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
Lambdas in a circle, forming a flower. I wanted it to be easy to draw, be subtle and look nice for haskellers and non-haskellers alike. Created in inkscape using free fonts.<br />
<br />
[[Image:Haskell-flower3.png]]<br />
<br />
--[[User:Tanimoto|tanimoto]] 05:39, 19 December 2008 (UTC)<br />
<br />
----<br />
<br />
A different take on the lambda-in-a-circle logo that looks less like the Half Life logo. Probably fits better than the monadic sequence<br />
operator in my other submission.<br />
<br />
[[Image:Haskell_logo_ideas_2_falconnl.png]]<br />
<br />
Update:<br />
Slight change and added letters, this time in the free Fonce Sans [http://liquisoft.deviantart.com/art/Fonce-Sans-Regular-Trial-25092730]<br />
font. I like Officina better, but if the font has to be free this is a reasonable substitute.<br />
<br />
[[Image:Haskell_logo_idea_3_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 08:34, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
Very quick attempt:<br />
<br />
[[Image:BurkeLibbey_Haskell.png]]<br />
<br />
The main font is [http://www.josbuivenga.demon.nl/diavlo.html Diavlo] (free). The lambda is in Candara, which I believe ships with Vista<br />
and/or XP. Not sure of the licensing there. If there's significant interest in this, I'll redo it as a vector graphic.<br />
<br />
-- [[User:Burke|Burke]] 02:33, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
On behalf of the Ministry of Safety and Happiness I would like to promote the meme suggesting that Haskell is the programming language of<br />
choice for the Illuminati.<br />
<br />
[[Image:Haskell proceed.png]]<br />
<br />
--[[User:CznpyHrnjwczky|CznpyHrnjwczky]] 05:31, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
More of a mascotte, though she could be used in a logo as well.<br />
<br />
This is Monica Monad, and she's a Warm Fuzzy Thing. Just giving a face to SPJ's alternative name for monads :)<br />
<br />
Her main purpose would be to present tutorials.<br />
<br />
[[Image:Monica_monad_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 00:52, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
A slightly different take on the Haskell logo, as the lambda-in-a-circle looks a bit too much like the Half Life logo for my taste. This<br />
one references monads instead of lambda calculus. Three possible slogans, emphasizing the fun that comes from programming in Haskell.<br />
Number 2 and 3 also reference function composition. Number 3 is my personal favourite.<br />
<br />
[[Image:Haskell_logo_ideas_falconnl.png]]<br />
<br />
Update: a combination of my two logos on a t-shirt. This time with function arrows to indicate the causal relationships: because Haskell is<br />
pure, it's simple. Because it's simple, it's fun.<br />
<br />
[[Image:Haskell_logo_ideas_tshirt_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 22:58, 15 December 2008 (GMT +1)<br />
<br />
: Yummy. What's the font? Is it free? [[User:Porges|Porges]] 21:59, 15 December 2008 (UTC)<br />
: Unfortunately, no. The font is called Officina Sans. Is that a problem? [[User:FalconNL|FalconNL]] 00:02, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
Simple, clean:<br />
<br />
[http://hpsg.fu-berlin.de/~rsling/img/haskell-shirt.jpeg http://hpsg.fu-berlin.de/~rsling/img/haskell-shirt.jpeg]<br />
<br />
I really like this t-shirt logo, by the way. Gets my vote so far. — [[User:Chrisdone|Chrisdone]] 00:18, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
Minor tweak to the above:<br />
<br />
[[Image:HaskellLogo-v2.png]]<br />
<br />
----<br />
<br />
Minor modification of the t-shirt logo, the lambda was a bit skewed in my opinion:<br />
<br />
[[Image:tshirt-logo-mod.png]]<br />
<br />
And another modification of the same theme:<br />
<br />
[[Image:tshirt-logo-mod-inv.png]]<br />
<br />
--[[User:Sebastiaan|Sebastiaan]] 13:29, 15 December 2008 (UTC)<br />
: I really like this one. A font other than Arial would be nice ;) [[User:Porges|Porges]] 21:25, 15 December 2008 (UTC)<br />
<br />
[[Image:HaskellLogoTShirtWhite.png]] -- [[User:Chrisdone|Chrisdone]] 23:19, 15 December 2008 (UTC)<br />
<br />
<br />
<br />
----<br />
<br />
Some ideas. Supposed to resemble a lambda abstraction. I realise there are no formal parameters. ---- [[User:Chrisdone|Chrisdone]] 00:12,<br />
15 December 2008 (UTC)<br />
<br />
[http://chrisdone.com/haskell-blah.png http://chrisdone.com/haskell-blah-thumb.png]<br />
<br />
----<br />
<br />
Here's another one; lambda is Gentium SIL, Haskell is MgOpen Cosmetica, tagline is MgOpen Canonica Italic. [[User:Porges|Porges]] 21:25, 15<br />
December 2008 (UTC)<br />
<br />
[[Image:Haskell Logo.png]]<br />
<br />
----<br />
<br />
Another take. A bit simpler, more symmetrical.<br />
<br />
[[Image:haskelllogobeshers.png]]<br />
<br />
----<br />
<br />
[[Image:Haskell-logo.png]]<br />
<br />
The logo uses Kautiva Bold as (non-free) font.<br />
<br />
--[[User:Eelco|Eelco]] 07:43, 15 December 2008 (UTC)<br />
<br />
This one is dedicated to Derek Elkins, to sooth his eyes after having them hurt on the previous logo:<br />
<br />
[[Image:Haskell-logo-funny.png]]<br />
<br />
--[[User:Eelco|Eelco]] 08:53, 15 December 2008 (UTC)<br />
: Makes sense. Comic Sans is the *Official Font of Haskell*, after all.<br />
<br />
----<br />
[[Image:HaskellLogoTDavie.png]]<br />
<br />
[[Image:HaskellLogoTDavie.pdf]] (vector pdf version)<br />
<br />
[[Image:HaskellLogoTDavie2.png]]<br />
<br />
[[User:Beelsebob|Beelsebob]] 08:32, 15 December 2008 (UTC)<br />
<br />
---- <br />
<br />
[http://relapse-software.net/haskell_0.png http://relapse-software.net/haskell_0.png]<br />
<br />
[http://relapse-software.net/haskell_1.png http://relapse-software.net/haskell_1.png]<br />
<br />
----<br />
<br />
[http://relapse-software.net/haskell_5.png http://relapse-software.net/haskell_5.png]<br />
<br />
<br />
[http://relapse-software.net/haskell_2.png http://relapse-software.net/haskell_2.png]<br />
<br />
[http://relapse-software.net/haskell_3.png http://relapse-software.net/haskell_3.png]<br />
<br />
----<br />
<br />
Logo fun using Blender:<br />
<br />
[[Image:HsLogosMB.png|center|Haskell Logo idea with lambda as mascot]]<br />
<br />
I tried to give the lambda sign an ''alive'' feeling. --[[User:GokhanSan|GokhanSan]] 12:49, 15 December 2008 (UTC)<br />
: Middle one looks a bit too much like the ghostbusters logo :D [[User:Porges|Porges]] 21:25, 15 December 2008 (UTC)<br />
:: Hmm, I wonder if it's the choice of colors. Then again, with a minor alteration, we get a FreeBSD icon candidate:<br />
[[Image:HsLogoMB-BSD.png|beastie]] ;-) --[[User:GokhanSan|GokhanSan]] 08:52, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:HaskellLogoIdea05.gif]]<br />
<br />
Not sure about the colour. I tried to pick the purple from the current logo. Although the lower lambda is rotated there is<br />
[http://poinikastas.csad.ox.ac.uk/browseGlyphs.shtml historic precedence] for other forms of the letter. The lambda takes the angle from<br />
the 'k'. Font is News Gothic. Feel free to play with the concept. [[User:Rk|Rk]] 11:13, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
<br />
More vectorial Haskell logo concepts. Using inkscape and the popular [http://inde-graphics.deviantart.com/art/advent-font-57338302 advent<br />
font] (CC at-nc-nd).<br />
<br />
[[Image:Haskell_infinitylambda.png]]<br />
[[Image:Haskell_halfhalfinfinitylambda.png]]<br />
[[Image:Haskell_3qhalfinfinitylambda.png]]<br />
<br />
Vectorial images (svg):<br />
<br />
[http://haskell.org/sitewiki/images/8/86/Haskell_infinitylambda.svg 1]<br />
[http://haskell.org/sitewiki/images/d/df/Haskell_halfinfinitylambda.svg 2]<br />
[http://haskell.org/sitewiki/images/6/66/Haskell_3qhalfinfinitylambda.svg 3]<br />
<br />
* [[User:alvivi|alvivi]] 19:28, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Haskell-pure.png|haskell::pure]]<br />
<br />
--[[User:Rgreayer|Rgreayer]] 20:44, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
Find a font where 'k' looks like a reverse lambda (after removing the "stalk"). For example:<br />
<br />
[[Image:Kaskell.png|Kaskell]]<br />
<br />
Note this example uses Monotype Corsiva which is not a free font. If the basic approach looks good, we can find a similar free font that<br />
works.<br />
<br />
--[[User:Orenbenkiki|OrenBenKiki]] 01:40, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Haskell.png|Haskellll]]<br />
<br />
Illustrator, vector art available, apologies to GokhanSan<br />
<br />
--[[User:Mpeter|Mpeter]] 10:18, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
<br />
[http://relapse-software.net/haskell_6.png http://relapse-software.net/haskell_6.png]<br />
<br />
----<br />
<br />
[[Image:Haskell3.png|Haskell]]<br />
[[Image:Haskell4.png|Haskell]]<br />
<br />
Inkscape, vector art available.<br />
<br />
--[[User:Chromakode|Chromakode]] 07:14, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
I'll probably regret this...<br />
<br />
[[Image:NarleyYeeaaahh.jpg|Haskell - Narwals, YEEAAAAHH!!]]<br />
<br />
(Created with PAINT.NET)<br />
<br />
--[[User:Reified|Reified]] 07:20, 16 December 2008 (UTC)<br />
:It's a fun one but I erroneously read " Chaskell YEEAAAHH!! " [[User:Ripounet|Ripounet]]<br />
----<br />
<br />
The general idea is that it's just "Haskell" but with w lambda instead of the a. The font here is Myriad Pro but this would work with any<br />
good sans-serif font. It's color-agnostic, so it can be easily printer, presented as white on black or changed to a different color.<br />
<br />
[[Image:Haskell_logo_bonus.png]]<br />
<br />
[[Image:Haskell_logo_bonus2.png]]<br />
<br />
--[[User:BONUS|BONUS]] 14:40, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Axman6-logo-1.0.png]]<br />
<br />
In black:<br />
<br />
[[Image:Axman6-logo-1.1.png]]<br />
<br />
[[Image:Axman6-logo-1.1-small.png]]<br />
<br />
--[[User:Axman6|Axman6]] 15:16, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Haskell_girl.jpg]]<br />
<br />
<br />
Oh, didn't know png's would work.<br />
--[[User:Tindrum|Tindrum]] 17:12, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Haskell_logo.png]]<br />
<br />
It is mutually recursive...<br />
Here is the [[Media:Haskell logo.svg|svg]].<br />
<br />
Second version:<br />
<br />
[[image:Haskell2_logo.png]]<br />
<br />
And the [[Media:Haskell2 logo.svg|svg]].<br />
<br />
--[[User:Trontonic|Trontonic]] 20:39, 16 December 2008 (UTC)<br />
<br />
----<br />
This is a variation on my [http://t-shirts.cafepress.com/item/lambda-revolution-fitted-tshirt/96543210 Cafepress t-shirt]. The PNG is<br />
generated from an Inkscape SVG.<br />
<br />
[[Image:Haskell-logo-revolution.png]]<br />
<br />
[[User:PaulJohnson|PaulJohnson]] 21:08, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:haskell-cjay.png]]<br />
<br />
Available as [[Media:Haskell-cjay.svg|svg]] (inkscape). Fonts: FreeSerif for lambda and >>. Bitstream Vera and FreeMono for other (afaik<br />
all free to use)<br />
<br />
[[User:Cjay|cjay]] 22:45, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
http://conal.net/Pan/Gallery/haskell-powered%20on%20white%20tiled%20360.png<br />
<br />
One I made with [http://conal.net/Pan/Gallery Pan] (purely functional image synthesis in Haskell) some years back. See also the<br />
[http://conal.net/Pan/Gallery/haskell-powered%20on%20white%20tiled%20720.png 720 square version]. I have a few sizes up to 2250 pixels<br />
square.<br />
<br />
[[User:Conal|Conal]] 03:40, 17 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Haskell_lambda.png]]<br />
<br />
Just kidding :P<br />
<br />
--[[User:Trontonic|Trontonic]] 05:04, 17 December 2008 (UTC)<br />
<br />
----<br />
=== Cale Gibbard ===<br />
[[Image:Haskell-logo-6up.png]]<br />
<br />
[http://haskell.org/haskellwiki/Image:Haskell-logo-6up.svg Inkscape SVG]<br />
<br />
I originally had no specific mountain in mind, but Don Stewart pointed out that this might be representative of Mt. Hood in Portland, Oregon, where Haskell was named.<br />
<br />
Regardless, I thought a summit, bathed in the pure mountain air would be a decent symbol for Haskell, the peak of contemporary programming. :)<br />
<br />
[[User:CaleGibbard|CaleGibbard]] 05:55, 17 December 2008 (UTC)<br />
:Here's a modified version with a slightly funkier font :) I think that it matches the lines of the image better... [[User:Porges|Porges]] 03:14, 18 December 2008 (UTC)<br />
<br />
[[Image:Testhask.png]]<br />
----<br />
<br />
Probably not a good choice for a logo:<br />
<br />
[[Image:Hazard lambda cracked 2.png]]<br />
<br />
----<br />
<br />
[[Image:Haskell_Ribbons.png]]<br />
<br />
[http://slipgate.za.net/~korpse/misc/Haskell_Ribbons.svg SVG]<br />
<br />
Simplicity.<br />
<br />
(It is possible that the font may need to be replaced with a free alternative.)<br />
<br />
[[User:Jonathanj|JonathanJ]] 16:34, 17 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Haskelllogosmax.png]]<br />
<br />
Available as SVG.<br />
<br />
[[User:MaxRabkin|MaxRabkin]] 05:37, 18 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:DoHaskell.png]]<br />
<br />
Another variation for the cognicenti:<br />
<br />
[[Image:JustHaskell.png]]<br />
<br />
--[[User:Warren|Warren]] 07:26, 18 December 2008 (UTC)<br />
<br />
----<br />
<br />
A slight variation of the ">\=" logo:<br />
<br />
[[Image:haskell-logo-doublef.png]]<br />
<br />
Not that it's worth much:). Available as [[Media:haskell-logo-doublef.svg|SVG]].<br />
<br />
[[User:Doublef|DoubleF]] 07:36, 18 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:haskell-apankrat.png]]<br />
<br />
The idea for this [http://en.wikipedia.org/wiki/Wordmark_(graphic_identity) wordmark] is to modify ''A'' to resemble λ and through this tie together the "Haskell" to the "Lambda". Modified ''A'' also works well as a standalone logo:<br />
<br />
[[Image:haskell-symbol-apankrat.png]]<br />
<br />
Note that ''any'' logo based on the unmodified λ symbol may look ambiguous to the people outside of Haskell community. While the λ in the context of programming languages is clearly associated with functional programming, it ''is'' a lowercase Greek L and so it's reasonable for an outsider to associate it with '''L'''isp, and not Haskell.<br />
<br />
PS. I just scrolled up and saw BONUS'es entry (14:40, 16 December 2008). While its idea is close, I think using pure λ in place of an A doesn't work because it effectively turn the name into H-L-skell.<br />
<br />
[[User:Apankrat|Apankrat]] 07:38, 18 December 2008 (UTC)<br />
<br />
<br />
----<br />
A very simple logo, made with inkscape, using math fonts, with various grades (B&W, grays, fill color & gradient) and backgrounds<br />
[[Image:Simple_haskell.png]]<br />
<br />
SVG available here:<br />
[[Image:Simple haskell.svgz]]<br />
<br />
[[User:Aubanel|Aubanel]] 18:08, 18 December 2008 (UTC)<br />
<br />
<br />
<br />
----<br />
<br />
[[Image:g3634.png]]<br />
<br />
Available as Inkscape [[Media:dessin.svg|SVG]]<br />
<br />
[[Image:g4441.png]]<br />
<br />
Available as Inkscape [[Media:dessin2.svg|SVG]]<br />
<br />
[[User:runrun|runrun]] 18 December 2008<br />
<br />
----<br />
<br />
[[Image:Haskell-logo2-max.png]]<br />
<br />
Contact me for SVG. Font is not currently free, but I designed it, so this can change if it becomes "the Haskell font". I think it shows some of the elegance that Haskell has. If you like the font but can put it with a better logo, go ahead. --[[User:MaxRabkin|MaxRabkin]] 04:53, 19 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:sgf.png]]<br />
<br />
I think the best way to represent the pure, functional nature of Haskell is with a pure and functional logo! Something modernist, minimalist, clean and simple. I'd prefer not to put highlights of the language's syntax in the logo - that's remarkably concrete for a language good at abstraction. Even lambdas etc. should be slightly hidden - those who know what it's about can see them, and everyone else doesn't think 'what's that funny symbol?'. For the font, again, something functional like a light Helvetica or Univers.<br />
<br />
So, I thought I'd have a go at a few variations. I'm not convinced it's worked, but there you go. I've shamelessly ripped off tanimoto's idea. [[User:Sgf|Sgf]] 08:13, 19 December 2008 (UTC)<br />
<br />
* Sgf, I really like your logos and I think you captured my idea much better than I could do. I especially like the red one, a bit Escher-esque. I wonder if we could turn the blue one into something that looks more like a snowflake than it currently does. Thanks. [[User:Tanimoto|tanimoto]] 10:43, 19 December 2008 (UTC)<br />
<br />
* I also like the blue and the red logo. The resemblance of a snowflake fits the purity of the language. Perhaps you could give the lambda's more volume to make it more plate-like? [[User:Felix|Felix]]<br />
<br />
* Thanks for the comments. I'm going to be offline for about a week, so I'm not going to have a chance to knock up further variations soon, much as I would like to. So, if you have the time, feel free to generate variations from the [[Media:sgf.svg|Inkscape SVG]]. Otherwise, I'll have a go when I get back. Cheers, [[User:Sgf|Sgf]] 01:48, 20 December 2008 (UTC)<br />
<br />
---<br />
<br />
λλλ<br />
<br />
Haskell The Revenge of the Nerds<br />
<br />
---<br />
<br />
http://www.haskells.com/images/logo.gif<br />
<br />
---<br />
<br />
[[Image:Ouroborous-oval.png|Ouroboros oval]]<br />
<br />
Paulo Tanimoto on the mailing list suggested something based on [http://www.example.com Orouboros]. Here is the [[Media:Ouroborous-oval.svg|Inkscape SVG]].<br />
<br />
[[User:PaulJohnson|PaulJohnson]]</div>PaulJohnsonhttps://wiki.haskell.org/Haskell_logos/New_logo_ideasHaskell logos/New logo ideas2008-12-21T12:00:19Z<p>PaulJohnson: Added Oroboros</p>
<hr />
<div>'''The great 2009 Haskell logo contest'''<br />
<br />
The Haskell logo has [http://www.willamette.edu/~fruehr/logos/intro.html changed over time], and the current "new" logo reflects the<br />
advanced features of Haskell. However, it is looking rather dated, and doesn't necessarily reflect the mature Haskell we have now.<br />
<br />
So, time to find a new logo. Something reflecting the modern emphasis of<br />
Haskell on purity and simplicity.<br />
<br />
Please submit logo-sized (not overly large) versions of your logo with optional text, with a preferably white background (such as for use on haskell.org).<br />
<br />
Please submit your entries here, and attach your name to them please. To be eligible,<br />
they will need to be visible on this page (e.g. uploaded, or link to the image). The image should be freely available (a suitable freely distributable license). Entries not displayed here won't be eligible.<br />
<br />
''The deadline for submissions is December 31, 2008, after which the top few submissions will be voted on by the community to decide a winner!''<br />
<br />
<br />
----<br />
[[Image:lambdanimal.png|150px]]<br />
[[Image:lambdanimal_nomane.png|150px]]<br />
<br />
Strange Lambdanimal, with or without a mane. [[Media:lambdanimal.svg|SVG (inkscape)]].<br />
<br />
by [[User:Ripounet|Ripounet]] 22:24, 18 December 2008 (UTC)<br />
<br />
----<br />
[http://galois.com/~dons/images/logos/Haskell_logo.png http://galois.com/~dons/images/logos/Haskell_logo.png]<br />
<br />
Dana Herz @ Galois.<br />
<br />
----<br />
[[Image:Haskell-tao.png|Haskell as Taoism]]<br />
<br />
Playing off a recent Haskell-Cafe thread, in which programming languages were compared to religions, and Haskell was equated to Taoism. The slogan makes at least a ''little'' sense: it obviously goes with the logo, and 'Duals' are important to Cat theory, which influences Haskell strongly. [[Media:Haskell-tao.svg|SVG]] available. Font is Lucida Calligraphic, a less ubiquitous calligraphic font might be better.<br />
<br />
--[[User:Rgreayer|Rgreayer]] 15:16, 18 December 2008 (UTC)<br />
----<br />
[[Image:unsafeHaskell.png]]<br />
[[User:Beelsebob|Beelsebob]] 09:09, 18 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:haskell-cjay2.png]]<br />
[[User:Cjay|cjay]] 03:49, 18 December 2008 (UTC)<br />
<br />
<br />
[[Image:haskell-cjay2a.png]]<br />
[[User:Cjay|cjay]] 14:27, 18 December 2008 (UTC)<br />
<br />
<br />
[[Image:haskell-cjay2b.png]]<br />
[[User:Cjay|cjay]] 03:22, 19 December 2008 (UTC)<br />
<br />
<br />
[[Image:haskell-cjay2c.png]]<br />
[[User:Cjay|cjay]] 23:03, 19 December 2008 (UTC)<br />
<br />
<br />
Available as svg [[Media:Haskell-cjay2.svg|1]] [[Media:Haskell-cjay2a.svg|2]] [[Media:Haskell-cjay2b.svg|3]] [[Media:Haskell-cjay2c.svg|4]] (inkscape). Fonts: FreeSerif for lambda, >> and the arrow head; Impact Label for "Haskell" (1&2), SF Alien Encounters Solid (3) (all free).<br />
<br />
----<br />
<br />
My attempt at a new Haskell logo:<br />
<br />
[[Image:Haskell_jdr.png]]<br />
<br />
So I guess the standalone version would then be:<br />
<br />
[[Image:Haskell_h_jdr.png]]<br />
<br />
[http://www.voetsjoeba.com Jeroen De Ridder]<br />
<br />
----<br />
<br />
[http://galois.com/~dons/images/logo-3-curved.png http://galois.com/~dons/images/logo-3-curved.png]<br />
<br />
[http://article.gmane.org/gmane.comp.lang.haskell.cafe/49072 George Pollard]<br />
<br />
----<br />
<br />
[[Image:Jeff-heard-1.png]]<br />
<br />
[http://thread.gmane.org/gmane.comp.lang.haskell.cafe/48892/focus=48893 Jeff Heard]. <br />
<br />
----<br />
<br />
Here's an attempt to depict the polish, elegance, and purity of Haskell by merging the H and lambda into an iconic gem.<br />
<br />
[[Image:Haskell2v3.png]]<br />
<br />
Made in Inkscape, with an SVG available.<br />
<br />
--[[User:Chromakode|Chromakode]] 03:18, 17 December 2008 (UTC)<br />
<br />
:I love that one, hope it wins. But I can't see the lambda merged in it, where is it hidden? [[User:Ripounet|Ripounet]]<br />
<br />
:Thanks for your comment. :)<br />
:The light blue highlight of the H is in the shape of an abstract lambda. [[User:Chromakode|Chromakode]]<br />
<br />
----<br />
<br />
All credit goes to Darrin Thompson for posting the ASCII inspiration for this to haskell-cafe. I, Jeff Wheeler, just mocked it up to look<br />
pretty. Here are two interpretations:<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo1.png http://media.nokrev.com/junk/haskell-logos/logo1.png]<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo2.png http://media.nokrev.com/junk/haskell-logos/logo2.png]<br />
<br />
Two with rounded edges:<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo8.png http://media.nokrev.com/junk/haskell-logos/logo8.png]<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo9.png http://media.nokrev.com/junk/haskell-logos/logo9.png]<br />
<br />
Here's a icon-sized version:<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo4.png http://media.nokrev.com/junk/haskell-logos/logo4.png]<br />
<br />
The first two without an background:<br />
<br />
[http://media.nokrev.com/junk/haskell-logos/logo6.png http://media.nokrev.com/junk/haskell-logos/logo6.png] [http://media.nokrev.com/junk/haskell-logos/logo7.png http://media.nokrev.com/junk/haskell-logos/logo7.png]<br />
<br />
--[[User:Jeffwheeler|Jeffwheeler]] 02:42, 17 December 2008 (UTC)<br />
----<br />
Mix and match<br />
<br />
[http://relapse-software.net/haskell_7.png http://relapse-software.net/haskell_7.png]<br />
----<br />
More mix and match, borrowing bind-lambda icon, star/flower idea, and font/verbiage from other submissions...(Raspoutine Classic font, [[Media:Haskell-Symstar.svg|SVG]] available).<br />
[[Image:Haskell-Symstar.png|Haskell - Logo variant]]<br />
<br />
--[[User:Rgreayer|Rgreayer]] 21:39, 17 December 2008 (UTC)<br />
----<br />
I really like the logo above. Here are some variations. The font name is ModeNine.<br />
<br />
<br />
[[Image:Haskellvariations1.jpg|Haskell - Logo Variations A]]<br />
<br />
[[Image:Haskellvariations2.jpg|Haskell - Logo Variations B]]<br />
<br />
--[[User:Reified|Reified]] 14:48, 17 December 2008 (UTC)<br />
<br />
----<br />
<br />
A different logo idea, using toddler's letter blocks to convey the simplicity of Haskell. Exact block look and font used can be changed,<br />
but this is the basic idea.<br />
<br />
[[Image:Haskell_logo_ideas_4_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 23:29, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Stupidb123logo.jpg]]<br />
<br />
--[[User:Stupidb123|Stupidb123]] 12:40, 16 December 2008 (UTC)<br />
<br />
----<br />
"The lightbulb lady" (concept: a lady/lightbulb made out of an inverted lambda, hope it catches...).<br />
Font: Museo Sans 500 (free of charge, add to the cart [http://new.myfonts.com/fonts/exljbris/museo-sans/500/ here]).<br />
<br />
[[Image:The_lady.png]]<br />
<br />
-- [[User:eu-prleu-peupeu]]<br />
----<br />
Just another version of the initial spreadshirt variant. <br />
The black background is now part of the logo. The text should be optional.<br />
<br />
[[Image:haskell_spreadshirt_logo.png|400px]]<br />
<br />
[[User:Frosch03|Frosch03]] 11:41, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
Made with Inkscape. The source in SVG is available [http://www.gburri.org/bordel/logo_haskell_gburri.svg here].<br />
<br />
Font : [http://www.dafont.com/raspoutine.font?nb_ppp=50&text=Haskell Raspoutine (free)].<br />
<br />
[[Image:haskel_logo_preview_gburri.png]]<br />
<br />
[[User:Gburri|Gburri]] 09:58, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
Lambdas in a circle, forming a flower. I wanted it to be easy to draw, be subtle and look nice for haskellers and non-haskellers alike. Created in inkscape using free fonts.<br />
<br />
[[Image:Haskell-flower3.png]]<br />
<br />
--[[User:Tanimoto|tanimoto]] 05:39, 19 December 2008 (UTC)<br />
<br />
----<br />
<br />
A different take on the lambda-in-a-circle logo that looks less like the Half Life logo. Probably fits better than the monadic sequence<br />
operator in my other submission.<br />
<br />
[[Image:Haskell_logo_ideas_2_falconnl.png]]<br />
<br />
Update:<br />
Slight change and added letters, this time in the free Fonce Sans [http://liquisoft.deviantart.com/art/Fonce-Sans-Regular-Trial-25092730]<br />
font. I like Officina better, but if the font has to be free this is a reasonable substitute.<br />
<br />
[[Image:Haskell_logo_idea_3_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 08:34, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
Very quick attempt:<br />
<br />
[[Image:BurkeLibbey_Haskell.png]]<br />
<br />
The main font is [http://www.josbuivenga.demon.nl/diavlo.html Diavlo] (free). The lambda is in Candara, which I believe ships with Vista<br />
and/or XP. Not sure of the licensing there. If there's significant interest in this, I'll redo it as a vector graphic.<br />
<br />
-- [[User:Burke|Burke]] 02:33, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
On behalf of the Ministry of Safety and Happiness I would like to promote the meme suggesting that Haskell is the programming language of<br />
choice for the Illuminati.<br />
<br />
[[Image:Haskell proceed.png]]<br />
<br />
--[[User:CznpyHrnjwczky|CznpyHrnjwczky]] 05:31, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
More of a mascotte, though she could be used in a logo as well.<br />
<br />
This is Monica Monad, and she's a Warm Fuzzy Thing. Just giving a face to SPJ's alternative name for monads :)<br />
<br />
Her main purpose would be to present tutorials.<br />
<br />
[[Image:Monica_monad_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 00:52, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
A slightly different take on the Haskell logo, as the lambda-in-a-circle looks a bit too much like the Half Life logo for my taste. This<br />
one references monads instead of lambda calculus. Three possible slogans, emphasizing the fun that comes from programming in Haskell.<br />
Number 2 and 3 also reference function composition. Number 3 is my personal favourite.<br />
<br />
[[Image:Haskell_logo_ideas_falconnl.png]]<br />
<br />
Update: a combination of my two logos on a t-shirt. This time with function arrows to indicate the causal relationships: because Haskell is<br />
pure, it's simple. Because it's simple, it's fun.<br />
<br />
[[Image:Haskell_logo_ideas_tshirt_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 22:58, 15 December 2008 (GMT +1)<br />
<br />
: Yummy. What's the font? Is it free? [[User:Porges|Porges]] 21:59, 15 December 2008 (UTC)<br />
: Unfortunately, no. The font is called Officina Sans. Is that a problem? [[User:FalconNL|FalconNL]] 00:02, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
Simple, clean:<br />
<br />
[http://hpsg.fu-berlin.de/~rsling/img/haskell-shirt.jpeg http://hpsg.fu-berlin.de/~rsling/img/haskell-shirt.jpeg]<br />
<br />
I really like this t-shirt logo, by the way. Gets my vote so far. — [[User:Chrisdone|Chrisdone]] 00:18, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
Minor tweak to the above:<br />
<br />
[[Image:HaskellLogo-v2.png]]<br />
<br />
----<br />
<br />
Minor modification of the t-shirt logo, the lambda was a bit skewed in my opinion:<br />
<br />
[[Image:tshirt-logo-mod.png]]<br />
<br />
And another modification of the same theme:<br />
<br />
[[Image:tshirt-logo-mod-inv.png]]<br />
<br />
--[[User:Sebastiaan|Sebastiaan]] 13:29, 15 December 2008 (UTC)<br />
: I really like this one. A font other than Arial would be nice ;) [[User:Porges|Porges]] 21:25, 15 December 2008 (UTC)<br />
<br />
[[Image:HaskellLogoTShirtWhite.png]] -- [[User:Chrisdone|Chrisdone]] 23:19, 15 December 2008 (UTC)<br />
<br />
<br />
<br />
----<br />
<br />
Some ideas. Supposed to resemble a lambda abstraction. I realise there are no formal parameters. ---- [[User:Chrisdone|Chrisdone]] 00:12,<br />
15 December 2008 (UTC)<br />
<br />
[http://chrisdone.com/haskell-blah.png http://chrisdone.com/haskell-blah-thumb.png]<br />
<br />
----<br />
<br />
Here's another one; lambda is Gentium SIL, Haskell is MgOpen Cosmetica, tagline is MgOpen Canonica Italic. [[User:Porges|Porges]] 21:25, 15<br />
December 2008 (UTC)<br />
<br />
[[Image:Haskell Logo.png]]<br />
<br />
----<br />
<br />
Another take. A bit simpler, more symmetrical.<br />
<br />
[[Image:haskelllogobeshers.png]]<br />
<br />
----<br />
<br />
[[Image:Haskell-logo.png]]<br />
<br />
The logo uses Kautiva Bold as (non-free) font.<br />
<br />
--[[User:Eelco|Eelco]] 07:43, 15 December 2008 (UTC)<br />
<br />
This one is dedicated to Derek Elkins, to sooth his eyes after having them hurt on the previous logo:<br />
<br />
[[Image:Haskell-logo-funny.png]]<br />
<br />
--[[User:Eelco|Eelco]] 08:53, 15 December 2008 (UTC)<br />
: Makes sense. Comic Sans is the *Official Font of Haskell*, after all.<br />
<br />
----<br />
[[Image:HaskellLogoTDavie.png]]<br />
<br />
[[Image:HaskellLogoTDavie.pdf]] (vector pdf version)<br />
<br />
[[Image:HaskellLogoTDavie2.png]]<br />
<br />
[[User:Beelsebob|Beelsebob]] 08:32, 15 December 2008 (UTC)<br />
<br />
---- <br />
<br />
[http://relapse-software.net/haskell_0.png http://relapse-software.net/haskell_0.png]<br />
<br />
[http://relapse-software.net/haskell_1.png http://relapse-software.net/haskell_1.png]<br />
<br />
----<br />
<br />
[http://relapse-software.net/haskell_5.png http://relapse-software.net/haskell_5.png]<br />
<br />
<br />
[http://relapse-software.net/haskell_2.png http://relapse-software.net/haskell_2.png]<br />
<br />
[http://relapse-software.net/haskell_3.png http://relapse-software.net/haskell_3.png]<br />
<br />
----<br />
<br />
Logo fun using Blender:<br />
<br />
[[Image:HsLogosMB.png|center|Haskell Logo idea with lambda as mascot]]<br />
<br />
I tried to give the lambda sign an ''alive'' feeling. --[[User:GokhanSan|GokhanSan]] 12:49, 15 December 2008 (UTC)<br />
: Middle one looks a bit too much like the ghostbusters logo :D [[User:Porges|Porges]] 21:25, 15 December 2008 (UTC)<br />
:: Hmm, I wonder if it's the choice of colors. Then again, with a minor alteration, we get a FreeBSD icon candidate:<br />
[[Image:HsLogoMB-BSD.png|beastie]] ;-) --[[User:GokhanSan|GokhanSan]] 08:52, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:HaskellLogoIdea05.gif]]<br />
<br />
Not sure about the colour. I tried to pick the purple from the current logo. Although the lower lambda is rotated there is<br />
[http://poinikastas.csad.ox.ac.uk/browseGlyphs.shtml historic precedence] for other forms of the letter. The lambda takes the angle from<br />
the 'k'. Font is News Gothic. Feel free to play with the concept. [[User:Rk|Rk]] 11:13, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
<br />
More vectorial Haskell logo concepts. Using inkscape and the popular [http://inde-graphics.deviantart.com/art/advent-font-57338302 advent<br />
font] (CC at-nc-nd).<br />
<br />
[[Image:Haskell_infinitylambda.png]]<br />
[[Image:Haskell_halfhalfinfinitylambda.png]]<br />
[[Image:Haskell_3qhalfinfinitylambda.png]]<br />
<br />
Vectorial images (svg):<br />
<br />
[http://haskell.org/sitewiki/images/8/86/Haskell_infinitylambda.svg 1]<br />
[http://haskell.org/sitewiki/images/d/df/Haskell_halfinfinitylambda.svg 2]<br />
[http://haskell.org/sitewiki/images/6/66/Haskell_3qhalfinfinitylambda.svg 3]<br />
<br />
* [[User:alvivi|alvivi]] 19:28, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Haskell-pure.png|haskell::pure]]<br />
<br />
--[[User:Rgreayer|Rgreayer]] 20:44, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
Find a font where 'k' looks like a reverse lambda (after removing the "stalk"). For example:<br />
<br />
[[Image:Kaskell.png|Kaskell]]<br />
<br />
Note this example uses Monotype Corsiva which is not a free font. If the basic approach looks good, we can find a similar free font that<br />
works.<br />
<br />
--[[User:Orenbenkiki|OrenBenKiki]] 01:40, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Haskell.png|Haskellll]]<br />
<br />
Illustrator, vector art available, apologies to GokhanSan<br />
<br />
--[[User:Mpeter|Mpeter]] 10:18, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
<br />
[http://relapse-software.net/haskell_6.png http://relapse-software.net/haskell_6.png]<br />
<br />
----<br />
<br />
[[Image:Haskell3.png|Haskell]]<br />
[[Image:Haskell4.png|Haskell]]<br />
<br />
Inkscape, vector art available.<br />
<br />
--[[User:Chromakode|Chromakode]] 07:14, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
I'll probably regret this...<br />
<br />
[[Image:NarleyYeeaaahh.jpg|Haskell - Narwals, YEEAAAAHH!!]]<br />
<br />
(Created with PAINT.NET)<br />
<br />
--[[User:Reified|Reified]] 07:20, 16 December 2008 (UTC)<br />
:It's a fun one but I erroneously read " Chaskell YEEAAAHH!! " [[User:Ripounet|Ripounet]]<br />
----<br />
<br />
The general idea is that it's just "Haskell" but with w lambda instead of the a. The font here is Myriad Pro but this would work with any<br />
good sans-serif font. It's color-agnostic, so it can be easily printer, presented as white on black or changed to a different color.<br />
<br />
[[Image:Haskell_logo_bonus.png]]<br />
<br />
[[Image:Haskell_logo_bonus2.png]]<br />
<br />
--[[User:BONUS|BONUS]] 14:40, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Axman6-logo-1.0.png]]<br />
<br />
In black:<br />
<br />
[[Image:Axman6-logo-1.1.png]]<br />
<br />
[[Image:Axman6-logo-1.1-small.png]]<br />
<br />
--[[User:Axman6|Axman6]] 15:16, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Haskell_girl.jpg]]<br />
<br />
<br />
Oh, didn't know png's would work.<br />
--[[User:Tindrum|Tindrum]] 17:12, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Haskell_logo.png]]<br />
<br />
It is mutually recursive...<br />
Here is the [[Media:Haskell logo.svg|svg]].<br />
<br />
Second version:<br />
<br />
[[image:Haskell2_logo.png]]<br />
<br />
And the [[Media:Haskell2 logo.svg|svg]].<br />
<br />
--[[User:Trontonic|Trontonic]] 20:39, 16 December 2008 (UTC)<br />
<br />
----<br />
This is a variation on my [http://t-shirts.cafepress.com/item/lambda-revolution-fitted-tshirt/96543210 Cafepress t-shirt]. The PNG is<br />
generated from an Inkscape SVG.<br />
<br />
[[Image:Haskell-logo-revolution.png]]<br />
<br />
[[User:PaulJohnson|PaulJohnson]] 21:08, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:haskell-cjay.png]]<br />
<br />
Available as [[Media:Haskell-cjay.svg|svg]] (inkscape). Fonts: FreeSerif for lambda and >>. Bitstream Vera and FreeMono for other (afaik<br />
all free to use)<br />
<br />
[[User:Cjay|cjay]] 22:45, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
http://conal.net/Pan/Gallery/haskell-powered%20on%20white%20tiled%20360.png<br />
<br />
One I made with [http://conal.net/Pan/Gallery Pan] (purely functional image synthesis in Haskell) some years back. See also the<br />
[http://conal.net/Pan/Gallery/haskell-powered%20on%20white%20tiled%20720.png 720 square version]. I have a few sizes up to 2250 pixels<br />
square.<br />
<br />
[[User:Conal|Conal]] 03:40, 17 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Haskell_lambda.png]]<br />
<br />
Just kidding :P<br />
<br />
--[[User:Trontonic|Trontonic]] 05:04, 17 December 2008 (UTC)<br />
<br />
----<br />
=== Cale Gibbard ===<br />
[[Image:Haskell-logo-6up.png]]<br />
<br />
[http://haskell.org/haskellwiki/Image:Haskell-logo-6up.svg Inkscape SVG]<br />
<br />
I originally had no specific mountain in mind, but Don Stewart pointed out that this might be representative of Mt. Hood in Portland, Oregon, where Haskell was named.<br />
<br />
Regardless, I thought a summit, bathed in the pure mountain air would be a decent symbol for Haskell, the peak of contemporary programming. :)<br />
<br />
[[User:CaleGibbard|CaleGibbard]] 05:55, 17 December 2008 (UTC)<br />
:Here's a modified version with a slightly funkier font :) I think that it matches the lines of the image better... [[User:Porges|Porges]] 03:14, 18 December 2008 (UTC)<br />
<br />
[[Image:Testhask.png]]<br />
----<br />
<br />
Probably not a good choice for a logo:<br />
<br />
[[Image:Hazard lambda cracked 2.png]]<br />
<br />
----<br />
<br />
[[Image:Haskell_Ribbons.png]]<br />
<br />
[http://slipgate.za.net/~korpse/misc/Haskell_Ribbons.svg SVG]<br />
<br />
Simplicity.<br />
<br />
(It is possible that the font may need to be replaced with a free alternative.)<br />
<br />
[[User:Jonathanj|JonathanJ]] 16:34, 17 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Haskelllogosmax.png]]<br />
<br />
Available as SVG.<br />
<br />
[[User:MaxRabkin|MaxRabkin]] 05:37, 18 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:DoHaskell.png]]<br />
<br />
Another variation for the cognicenti:<br />
<br />
[[Image:JustHaskell.png]]<br />
<br />
--[[User:Warren|Warren]] 07:26, 18 December 2008 (UTC)<br />
<br />
----<br />
<br />
A slight variation of the ">\=" logo:<br />
<br />
[[Image:haskell-logo-doublef.png]]<br />
<br />
Not that it's worth much:). Available as [[Media:haskell-logo-doublef.svg|SVG]].<br />
<br />
[[User:Doublef|DoubleF]] 07:36, 18 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:haskell-apankrat.png]]<br />
<br />
The idea for this [http://en.wikipedia.org/wiki/Wordmark_(graphic_identity) wordmark] is to modify ''A'' to resemble λ and through this tie together the "Haskell" to the "Lambda". Modified ''A'' also works well as a standalone logo:<br />
<br />
[[Image:haskell-symbol-apankrat.png]]<br />
<br />
Note that ''any'' logo based on the unmodified λ symbol may look ambiguous to the people outside of Haskell community. While the λ in the context of programming languages is clearly associated with functional programming, it ''is'' a lowercase Greek L and so it's reasonable for an outsider to associate it with '''L'''isp, and not Haskell.<br />
<br />
PS. I just scrolled up and saw BONUS'es entry (14:40, 16 December 2008). While its idea is close, I think using pure λ in place of an A doesn't work because it effectively turn the name into H-L-skell.<br />
<br />
[[User:Apankrat|Apankrat]] 07:38, 18 December 2008 (UTC)<br />
<br />
<br />
----<br />
A very simple logo, made with inkscape, using math fonts, with various grades (B&W, grays, fill color & gradient) and backgrounds<br />
[[Image:Simple_haskell.png]]<br />
<br />
SVG available here:<br />
[[Image:Simple haskell.svgz]]<br />
<br />
[[User:Aubanel|Aubanel]] 18:08, 18 December 2008 (UTC)<br />
<br />
<br />
<br />
----<br />
<br />
[[Image:g3634.png]]<br />
<br />
Available as Inkscape [[Media:dessin.svg|SVG]]<br />
<br />
[[Image:g4441.png]]<br />
<br />
Available as Inkscape [[Media:dessin2.svg|SVG]]<br />
<br />
[[User:runrun|runrun]] 18 December 2008<br />
<br />
----<br />
<br />
[[Image:Haskell-logo2-max.png]]<br />
<br />
Contact me for SVG. Font is not currently free, but I designed it, so this can change if it becomes "the Haskell font". I think it shows some of the elegance that Haskell has. If you like the font but can put it with a better logo, go ahead. --[[User:MaxRabkin|MaxRabkin]] 04:53, 19 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:sgf.png]]<br />
<br />
I think the best way to represent the pure, functional nature of Haskell is with a pure and functional logo! Something modernist, minimalist, clean and simple. I'd prefer not to put highlights of the language's syntax in the logo - that's remarkably concrete for a language good at abstraction. Even lambdas etc. should be slightly hidden - those who know what it's about can see them, and everyone else doesn't think 'what's that funny symbol?'. For the font, again, something functional like a light Helvetica or Univers.<br />
<br />
So, I thought I'd have a go at a few variations. I'm not convinced it's worked, but there you go. I've shamelessly ripped off tanimoto's idea. [[User:Sgf|Sgf]] 08:13, 19 December 2008 (UTC)<br />
<br />
* Sgf, I really like your logos and I think you captured my idea much better than I could do. I especially like the red one, a bit Escher-esque. I wonder if we could turn the blue one into something that looks more like a snowflake than it currently does. Thanks. [[User:Tanimoto|tanimoto]] 10:43, 19 December 2008 (UTC)<br />
<br />
* I also like the blue and the red logo. The resemblance of a snowflake fits the purity of the language. Perhaps you could give the lambda's more volume to make it more plate-like? [[User:Felix|Felix]]<br />
<br />
* Thanks for the comments. I'm going to be offline for about a week, so I'm not going to have a chance to knock up further variations soon, much as I would like to. So, if you have the time, feel free to generate variations from the [[Media:sgf.svg|Inkscape SVG]]. Otherwise, I'll have a go when I get back. Cheers, [[User:Sgf|Sgf]] 01:48, 20 December 2008 (UTC)<br />
<br />
---<br />
<br />
λλλ<br />
<br />
Haskell The Revenge of the Nerds<br />
<br />
---<br />
<br />
http://www.haskells.com/images/logo.gif<br />
<br />
---<br />
<br />
[[Image:Ouroborous-oval.png|Ouroboros oval]]<br />
<br />
Someone on the mailing list suggested something based on [http://www.example.com Orouboros]. Here is the [[Ouroborous-oval.svg Inkscape SVG]].<br />
<br />
[[User:PaulJohnson|PaulJohnson]]</div>PaulJohnsonhttps://wiki.haskell.org/File:Ouroborous-oval.svgFile:Ouroborous-oval.svg2008-12-21T11:52:51Z<p>PaulJohnson: Blue ourobourous SVG from Inkscape</p>
<hr />
<div>Blue ourobourous SVG from Inkscape</div>PaulJohnsonhttps://wiki.haskell.org/File:Ouroborous-oval.pngFile:Ouroborous-oval.png2008-12-21T11:52:17Z<p>PaulJohnson: Blue ouroborous logo</p>
<hr />
<div>Blue ouroborous logo</div>PaulJohnsonhttps://wiki.haskell.org/Haskell_logos/New_logo_ideasHaskell logos/New logo ideas2008-12-16T21:08:32Z<p>PaulJohnson: Added my name</p>
<hr />
<div>'''The great 2009 Haskell logo contest'''<br />
<br />
The Haskell logo has [http://www.willamette.edu/~fruehr/logos/intro.html changed over time], and the current "new" logo reflects the advanced features of Haskell. However, it is looking rather dated, and doesn't necessarily reflect the mature Haskell we have now.<br />
<br />
So, time to find a new logo. Something reflecting the modern emphasis of<br />
Haskell on purity and simplicity.<br />
<br />
Please submit your entries here, and attach your name to them. To be eligible,<br />
you will need to upload them.<br />
<br />
<br />
----<br />
<br />
[[Image:Stupidb123logo.jpg]]<br />
<br />
--[[User:Stupidb123|Stupidb123]] 12:40, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
Just another version of the initial spreadshirt variant. <br />
The black background is now part of the logo. The text should be optional.<br />
<br />
[[Image:haskell_spreadshirt_logo.png|400px]]<br />
<br />
[[User:Frosch03|Frosch03]] 11:41, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
Made with Inkscape (SVG). Font : Calibri.<br />
<br />
[[Image:Haskell logo v1.png]]<br />
<br />
[[Image:Haskell logo v2.png]]<br />
<br />
[[User:Gburri|Gburri]] 09:58, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
Many submissions are putting a lambda inside a circle, so I thought about reversing the idea and forming a circle using lambdas. My drawing on paper was much cooler, because it looked like a flower, but I'm terrible at inkscape.<br />
<br />
Please feel free to reuse this idea.<br />
<br />
[[Image:Haskell-flower.png]]<br />
<br />
--[[User:Tanimoto|tanimoto]] 07:43, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
A different take on the lambda-in-a-circle logo that looks less like the Half Life logo. Probably fits better than the monadic sequence operator in my other submission.<br />
<br />
[[Image:Haskell_logo_ideas_2_falconnl.png]]<br />
<br />
Update:<br />
Slight change and added letters, this time in the free Fonce Sans [http://liquisoft.deviantart.com/art/Fonce-Sans-Regular-Trial-25092730] font. I like Officina better, but if the font has to be free this is a reasonable substitute.<br />
<br />
[[Image:Haskell_logo_idea_3_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 08:34, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
Very quick attempt:<br />
<br />
[[Image:BurkeLibbey_Haskell.png]]<br />
<br />
The main font is [http://www.josbuivenga.demon.nl/diavlo.html Diavlo] (free). The lambda is in Candara, which I believe ships with Vista and/or XP. Not sure of the licensing there. If there's significant interest in this, I'll redo it as a vector graphic.<br />
<br />
-- [[User:Burke|Burke]] 02:33, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
On behalf of the Ministry of Safety and Happiness I would like to promote the meme suggesting that Haskell is the programming language of choice for the Illuminati.<br />
<br />
[[Image:Haskell proceed.png]]<br />
<br />
--[[User:CznpyHrnjwczky|CznpyHrnjwczky]] 05:31, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
More of a mascotte, though she could be used in a logo as well.<br />
<br />
This is Monica Monad, and she's a Warm Fuzzy Thing. Just giving a face to SPJ's alternative name for monads :)<br />
<br />
Her main purpose would be to present tutorials.<br />
<br />
[[Image:Monica_monad_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 00:52, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
A slightly different take on the Haskell logo, as the lambda-in-a-circle looks a bit too much like the Half Life logo for my taste. This one references monads instead of lambda calculus. Three possible slogans, emphasizing the fun that comes from programming in Haskell. Number 2 and 3 also reference function composition. Number 3 is my personal favourite.<br />
<br />
[[Image:Haskell_logo_ideas_falconnl.png]]<br />
<br />
Update: a combination of my two logos on a t-shirt. This time with function arrows to indicate the causal relationships: because Haskell is pure, it's simple. Because it's simple, it's fun.<br />
<br />
[[Image:Haskell_logo_ideas_tshirt_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 22:58, 15 December 2008 (GMT +1)<br />
<br />
: Yummy. What's the font? Is it free? [[User:Porges|Porges]] 21:59, 15 December 2008 (UTC)<br />
: Unfortunately, no. The font is called Officina Sans. Is that a problem? [[User:FalconNL|FalconNL]] 00:02, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
Simple, clean:<br />
<br />
[http://hpsg.fu-berlin.de/~rsling/img/haskell-shirt.jpeg http://hpsg.fu-berlin.de/~rsling/img/haskell-shirt.jpeg]<br />
<br />
I really like this t-shirt logo, by the way. Gets my vote so far. — [[User:Chrisdone|Chrisdone]] 00:18, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
Minor tweak to the above:<br />
<br />
[[Image:HaskellLogo-v2.png]]<br />
<br />
----<br />
<br />
Minor modification of the t-shirt logo, the lambda was a bit skewed in my opinion:<br />
<br />
[[Image:tshirt-logo-mod.png]]<br />
<br />
And another modification of the same theme:<br />
<br />
[[Image:tshirt-logo-mod-inv.png]]<br />
<br />
--[[User:Sebastiaan|Sebastiaan]] 13:29, 15 December 2008 (UTC)<br />
: I really like this one. A font other than Arial would be nice ;) [[User:Porges|Porges]] 21:25, 15 December 2008 (UTC)<br />
<br />
[[Image:HaskellLogoTShirtWhite.png]] -- [[User:Chrisdone|Chrisdone]] 23:19, 15 December 2008 (UTC)<br />
<br />
<br />
<br />
----<br />
<br />
Some ideas. Supposed to resemble a lambda abstraction. I realise there are no formal parameters. ---- [[User:Chrisdone|Chrisdone]] 00:12, 15 December 2008 (UTC)<br />
<br />
[http://chrisdone.com/haskell-blah.png http://chrisdone.com/haskell-blah-thumb.png]<br />
<br />
----<br />
<br />
Here's another one; lambda is Gentium SIL, Haskell is MgOpen Cosmetica, tagline is MgOpen Canonica Italic. [[User:Porges|Porges]] 21:25, 15 December 2008 (UTC)<br />
<br />
[[Image:Haskell Logo.png]]<br />
<br />
----<br />
<br />
Another take. A bit simpler, more symmetrical.<br />
<br />
[[Image:haskelllogobeshers.png]]<br />
<br />
----<br />
<br />
[[Image:Haskell-logo.png]]<br />
<br />
The logo uses Kautiva Bold as (non-free) font.<br />
<br />
--[[User:Eelco|Eelco]] 07:43, 15 December 2008 (UTC)<br />
<br />
This one is dedicated to Derek Elkins, to sooth his eyes after having them hurt on the previous logo:<br />
<br />
[[Image:Haskell-logo-funny.png]]<br />
<br />
--[[User:Eelco|Eelco]] 08:53, 15 December 2008 (UTC)<br />
: Makes sense. Comic Sans is the *Official Font of Haskell*, after all.<br />
<br />
----<br />
[[Image:HaskellLogoTDavie.png]]<br />
<br />
[[Image:HaskellLogoTDavie.pdf]] (vector pdf version)<br />
<br />
[[User:Beelsebob|Beelsebob]] 08:32, 15 December 2008 (UTC)<br />
<br />
---- <br />
<br />
[http://relapse-software.net/haskell_0.png http://relapse-software.net/haskell_0.png]<br />
<br />
[http://relapse-software.net/haskell_1.png http://relapse-software.net/haskell_1.png]<br />
<br />
----<br />
<br />
[http://relapse-software.net/haskell_5.png http://relapse-software.net/haskell_5.png]<br />
<br />
<br />
[http://relapse-software.net/haskell_2.png http://relapse-software.net/haskell_2.png]<br />
<br />
[http://relapse-software.net/haskell_3.png http://relapse-software.net/haskell_3.png]<br />
<br />
----<br />
<br />
Logo fun using Blender:<br />
<br />
[[Image:HsLogosMB.png|center|Haskell Logo idea with lambda as mascot]]<br />
<br />
I tried to give the lambda sign an ''alive'' feeling. --[[User:GokhanSan|GokhanSan]] 12:49, 15 December 2008 (UTC)<br />
: Middle one looks a bit too much like the ghostbusters logo :D [[User:Porges|Porges]] 21:25, 15 December 2008 (UTC)<br />
:: Hmm, I wonder if it's the choice of colors. Then again, with a minor alteration, we get a FreeBSD icon candidate: [[Image:HsLogoMB-BSD.png|beastie]] ;-) --[[User:GokhanSan|GokhanSan]] 08:52, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:HaskellLogoIdea05.gif]]<br />
<br />
Not sure about the colour. I tried to pick the purple from the current logo. Although the lower lambda is rotated there is [http://poinikastas.csad.ox.ac.uk/browseGlyphs.shtml historic precedence] for other forms of the letter. The lambda takes the angle from the 'k'. Font is News Gothic. Feel free to play with the concept. [[User:Rk|Rk]] 11:13, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
<br />
More vectorial Haskell logo concepts. Using inkscape and the popular [http://inde-graphics.deviantart.com/art/advent-font-57338302 advent font] (CC at-nc-nd).<br />
<br />
[[Image:Haskell_infinitylambda.png]]<br />
[[Image:Haskell_halfhalfinfinitylambda.png]]<br />
[[Image:Haskell_3qhalfinfinitylambda.png]]<br />
<br />
Vectorial images (svg):<br />
<br />
[http://haskell.org/sitewiki/images/8/86/Haskell_infinitylambda.svg 1]<br />
[http://haskell.org/sitewiki/images/d/df/Haskell_halfinfinitylambda.svg 2]<br />
[http://haskell.org/sitewiki/images/6/66/Haskell_3qhalfinfinitylambda.svg 3]<br />
<br />
* [[User:alvivi|alvivi]] 19:28, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Haskell-pure.png|haskell::pure]]<br />
<br />
--[[User:Rgreayer|Rgreayer]] 20:44, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
Find a font where 'k' looks like a reverse lambda (after removing the "stalk"). For example:<br />
<br />
[[Image:Kaskell.png|Kaskell]]<br />
<br />
Note this example uses Monotype Corsiva which is not a free font. If the basic approach looks good, we can find a similar free font that works.<br />
<br />
--[[User:Orenbenkiki|OrenBenKiki]] 01:40, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Haskell.png|Haskellll]]<br />
<br />
Illustrator, vector art available, apologies to GokhanSan<br />
<br />
--[[User:Mpeter|Mpeter]] 10:18, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
<br />
[http://relapse-software.net/haskell_6.png http://relapse-software.net/haskell_6.png]<br />
<br />
----<br />
<br />
[[Image:Haskell3.png|Haskell]]<br />
[[Image:Haskell4.png|Haskell]]<br />
<br />
Inkscape, vector art available.<br />
<br />
--[[User:Chromakode|Chromakode]] 07:14, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
I'll probably regret this...<br />
<br />
[[Image:NarleyYeeaaahh.jpg|Haskell - Narwals, YEEAAAAHH!!]]<br />
<br />
(Created with PAINT.NET)<br />
<br />
--[[User:Reified|Reified]] 07:20, 16 December 2008 (UTC)<br />
----<br />
<br />
The general idea is that it's just "Haskell" but with w lambda instead of the a. The font here is Myriad Pro but this would work with any good sans-serif font. It's color-agnostic, so it can be easily printer, presented as white on black or changed to a different color.<br />
<br />
[[Image:Haskell_logo_bonus.png]]<br />
<br />
[[Image:Haskell_logo_bonus2.png]]<br />
<br />
--[[User:BONUS|BONUS]] 14:40, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Axman6-logo-1.0.png]]<br />
<br />
--[[User:Axman6|Axman6]] 15:16, 16 December 2008 (UTC)<br />
<br />
<br />
[[image:Haskell_girl.jpg]]<br />
<br />
<br />
Oh, didn't know png's would work.<br />
--[[User:Tindrum|Tindrum]] 17:12, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Haskell_logo.png]]<br />
<br />
It is mutually recursive...<br />
Here is the [[Media:Haskell logo.svg|svg]].<br />
<br />
Second (and IMO better) version:<br />
<br />
[[image:Haskell2_logo.png]]<br />
<br />
And the [[Media:Haskell2 logo.svg|svg]].<br />
<br />
--[[User:Trontonic|Trontonic]] 20:39, 16 December 2008 (UTC)<br />
<br />
----<br />
This is a variation on my [http://t-shirts.cafepress.com/item/lambda-revolution-fitted-tshirt/96543210 Cafepress t-shirt]. The PNG is generated from an Inkscape SVG.<br />
<br />
[[Image:Haskell-logo-revolution.png]]<br />
<br />
[[User:PaulJohnson|PaulJohnson]] 21:08, 16 December 2008 (UTC)<br />
<br />
----</div>PaulJohnsonhttps://wiki.haskell.org/Haskell_logos/New_logo_ideasHaskell logos/New logo ideas2008-12-16T21:03:42Z<p>PaulJohnson: Added Lambda Revolution logo</p>
<hr />
<div>'''The great 2009 Haskell logo contest'''<br />
<br />
The Haskell logo has [http://www.willamette.edu/~fruehr/logos/intro.html changed over time], and the current "new" logo reflects the advanced features of Haskell. However, it is looking rather dated, and doesn't necessarily reflect the mature Haskell we have now.<br />
<br />
So, time to find a new logo. Something reflecting the modern emphasis of<br />
Haskell on purity and simplicity.<br />
<br />
Please submit your entries here, and attach your name to them. To be eligible,<br />
you will need to upload them.<br />
<br />
<br />
----<br />
<br />
[[Image:Stupidb123logo.jpg]]<br />
<br />
--[[User:Stupidb123|Stupidb123]] 12:40, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
Just another version of the initial spreadshirt variant. <br />
The black background is now part of the logo. The text should be optional.<br />
<br />
[[Image:haskell_spreadshirt_logo.png|400px]]<br />
<br />
[[User:Frosch03|Frosch03]] 11:41, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
Made with Inkscape (SVG). Font : Calibri.<br />
<br />
[[Image:Haskell logo v1.png]]<br />
<br />
[[Image:Haskell logo v2.png]]<br />
<br />
[[User:Gburri|Gburri]] 09:58, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
Many submissions are putting a lambda inside a circle, so I thought about reversing the idea and forming a circle using lambdas. My drawing on paper was much cooler, because it looked like a flower, but I'm terrible at inkscape.<br />
<br />
Please feel free to reuse this idea.<br />
<br />
[[Image:Haskell-flower.png]]<br />
<br />
--[[User:Tanimoto|tanimoto]] 07:43, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
A different take on the lambda-in-a-circle logo that looks less like the Half Life logo. Probably fits better than the monadic sequence operator in my other submission.<br />
<br />
[[Image:Haskell_logo_ideas_2_falconnl.png]]<br />
<br />
Update:<br />
Slight change and added letters, this time in the free Fonce Sans [http://liquisoft.deviantart.com/art/Fonce-Sans-Regular-Trial-25092730] font. I like Officina better, but if the font has to be free this is a reasonable substitute.<br />
<br />
[[Image:Haskell_logo_idea_3_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 08:34, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
Very quick attempt:<br />
<br />
[[Image:BurkeLibbey_Haskell.png]]<br />
<br />
The main font is [http://www.josbuivenga.demon.nl/diavlo.html Diavlo] (free). The lambda is in Candara, which I believe ships with Vista and/or XP. Not sure of the licensing there. If there's significant interest in this, I'll redo it as a vector graphic.<br />
<br />
-- [[User:Burke|Burke]] 02:33, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
On behalf of the Ministry of Safety and Happiness I would like to promote the meme suggesting that Haskell is the programming language of choice for the Illuminati.<br />
<br />
[[Image:Haskell proceed.png]]<br />
<br />
--[[User:CznpyHrnjwczky|CznpyHrnjwczky]] 05:31, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
More of a mascotte, though she could be used in a logo as well.<br />
<br />
This is Monica Monad, and she's a Warm Fuzzy Thing. Just giving a face to SPJ's alternative name for monads :)<br />
<br />
Her main purpose would be to present tutorials.<br />
<br />
[[Image:Monica_monad_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 00:52, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
A slightly different take on the Haskell logo, as the lambda-in-a-circle looks a bit too much like the Half Life logo for my taste. This one references monads instead of lambda calculus. Three possible slogans, emphasizing the fun that comes from programming in Haskell. Number 2 and 3 also reference function composition. Number 3 is my personal favourite.<br />
<br />
[[Image:Haskell_logo_ideas_falconnl.png]]<br />
<br />
Update: a combination of my two logos on a t-shirt. This time with function arrows to indicate the causal relationships: because Haskell is pure, it's simple. Because it's simple, it's fun.<br />
<br />
[[Image:Haskell_logo_ideas_tshirt_falconnl.png]]<br />
<br />
--[[User:FalconNL|FalconNL]] 22:58, 15 December 2008 (GMT +1)<br />
<br />
: Yummy. What's the font? Is it free? [[User:Porges|Porges]] 21:59, 15 December 2008 (UTC)<br />
: Unfortunately, no. The font is called Officina Sans. Is that a problem? [[User:FalconNL|FalconNL]] 00:02, 16 December 2008 (GMT +1)<br />
<br />
----<br />
<br />
Simple, clean:<br />
<br />
[http://hpsg.fu-berlin.de/~rsling/img/haskell-shirt.jpeg http://hpsg.fu-berlin.de/~rsling/img/haskell-shirt.jpeg]<br />
<br />
I really like this t-shirt logo, by the way. Gets my vote so far. — [[User:Chrisdone|Chrisdone]] 00:18, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
Minor tweak to the above:<br />
<br />
[[Image:HaskellLogo-v2.png]]<br />
<br />
----<br />
<br />
Minor modification of the t-shirt logo, the lambda was a bit skewed in my opinion:<br />
<br />
[[Image:tshirt-logo-mod.png]]<br />
<br />
And another modification of the same theme:<br />
<br />
[[Image:tshirt-logo-mod-inv.png]]<br />
<br />
--[[User:Sebastiaan|Sebastiaan]] 13:29, 15 December 2008 (UTC)<br />
: I really like this one. A font other than Arial would be nice ;) [[User:Porges|Porges]] 21:25, 15 December 2008 (UTC)<br />
<br />
[[Image:HaskellLogoTShirtWhite.png]] -- [[User:Chrisdone|Chrisdone]] 23:19, 15 December 2008 (UTC)<br />
<br />
<br />
<br />
----<br />
<br />
Some ideas. Supposed to resemble a lambda abstraction. I realise there are no formal parameters. ---- [[User:Chrisdone|Chrisdone]] 00:12, 15 December 2008 (UTC)<br />
<br />
[http://chrisdone.com/haskell-blah.png http://chrisdone.com/haskell-blah-thumb.png]<br />
<br />
----<br />
<br />
Here's another one; lambda is Gentium SIL, Haskell is MgOpen Cosmetica, tagline is MgOpen Canonica Italic. [[User:Porges|Porges]] 21:25, 15 December 2008 (UTC)<br />
<br />
[[Image:Haskell Logo.png]]<br />
<br />
----<br />
<br />
Another take. A bit simpler, more symmetrical.<br />
<br />
[[Image:haskelllogobeshers.png]]<br />
<br />
----<br />
<br />
[[Image:Haskell-logo.png]]<br />
<br />
The logo uses Kautiva Bold as (non-free) font.<br />
<br />
--[[User:Eelco|Eelco]] 07:43, 15 December 2008 (UTC)<br />
<br />
This one is dedicated to Derek Elkins, to sooth his eyes after having them hurt on the previous logo:<br />
<br />
[[Image:Haskell-logo-funny.png]]<br />
<br />
--[[User:Eelco|Eelco]] 08:53, 15 December 2008 (UTC)<br />
: Makes sense. Comic Sans is the *Official Font of Haskell*, after all.<br />
<br />
----<br />
[[Image:HaskellLogoTDavie.png]]<br />
<br />
[[Image:HaskellLogoTDavie.pdf]] (vector pdf version)<br />
<br />
[[User:Beelsebob|Beelsebob]] 08:32, 15 December 2008 (UTC)<br />
<br />
---- <br />
<br />
[http://relapse-software.net/haskell_0.png http://relapse-software.net/haskell_0.png]<br />
<br />
[http://relapse-software.net/haskell_1.png http://relapse-software.net/haskell_1.png]<br />
<br />
----<br />
<br />
[http://relapse-software.net/haskell_5.png http://relapse-software.net/haskell_5.png]<br />
<br />
<br />
[http://relapse-software.net/haskell_2.png http://relapse-software.net/haskell_2.png]<br />
<br />
[http://relapse-software.net/haskell_3.png http://relapse-software.net/haskell_3.png]<br />
<br />
----<br />
<br />
Logo fun using Blender:<br />
<br />
[[Image:HsLogosMB.png|center|Haskell Logo idea with lambda as mascot]]<br />
<br />
I tried to give the lambda sign an ''alive'' feeling. --[[User:GokhanSan|GokhanSan]] 12:49, 15 December 2008 (UTC)<br />
: Middle one looks a bit too much like the ghostbusters logo :D [[User:Porges|Porges]] 21:25, 15 December 2008 (UTC)<br />
:: Hmm, I wonder if it's the choice of colors. Then again, with a minor alteration, we get a FreeBSD icon candidate: [[Image:HsLogoMB-BSD.png|beastie]] ;-) --[[User:GokhanSan|GokhanSan]] 08:52, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:HaskellLogoIdea05.gif]]<br />
<br />
Not sure about the colour. I tried to pick the purple from the current logo. Although the lower lambda is rotated there is [http://poinikastas.csad.ox.ac.uk/browseGlyphs.shtml historic precedence] for other forms of the letter. The lambda takes the angle from the 'k'. Font is News Gothic. Feel free to play with the concept. [[User:Rk|Rk]] 11:13, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
<br />
More vectorial Haskell logo concepts. Using inkscape and the popular [http://inde-graphics.deviantart.com/art/advent-font-57338302 advent font] (CC at-nc-nd).<br />
<br />
[[Image:Haskell_infinitylambda.png]]<br />
[[Image:Haskell_halfhalfinfinitylambda.png]]<br />
[[Image:Haskell_3qhalfinfinitylambda.png]]<br />
<br />
Vectorial images (svg):<br />
<br />
[http://haskell.org/sitewiki/images/8/86/Haskell_infinitylambda.svg 1]<br />
[http://haskell.org/sitewiki/images/d/df/Haskell_halfinfinitylambda.svg 2]<br />
[http://haskell.org/sitewiki/images/6/66/Haskell_3qhalfinfinitylambda.svg 3]<br />
<br />
* [[User:alvivi|alvivi]] 19:28, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Haskell-pure.png|haskell::pure]]<br />
<br />
--[[User:Rgreayer|Rgreayer]] 20:44, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
Find a font where 'k' looks like a reverse lambda (after removing the "stalk"). For example:<br />
<br />
[[Image:Kaskell.png|Kaskell]]<br />
<br />
Note this example uses Monotype Corsiva which is not a free font. If the basic approach looks good, we can find a similar free font that works.<br />
<br />
--[[User:Orenbenkiki|OrenBenKiki]] 01:40, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[Image:Haskell.png|Haskellll]]<br />
<br />
Illustrator, vector art available, apologies to GokhanSan<br />
<br />
--[[User:Mpeter|Mpeter]] 10:18, 15 December 2008 (UTC)<br />
<br />
----<br />
<br />
<br />
[http://relapse-software.net/haskell_6.png http://relapse-software.net/haskell_6.png]<br />
<br />
----<br />
<br />
[[Image:Haskell3.png|Haskell]]<br />
[[Image:Haskell4.png|Haskell]]<br />
<br />
Inkscape, vector art available.<br />
<br />
--[[User:Chromakode|Chromakode]] 07:14, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
I'll probably regret this...<br />
<br />
[[Image:NarleyYeeaaahh.jpg|Haskell - Narwals, YEEAAAAHH!!]]<br />
<br />
(Created with PAINT.NET)<br />
<br />
--[[User:Reified|Reified]] 07:20, 16 December 2008 (UTC)<br />
----<br />
<br />
The general idea is that it's just "Haskell" but with w lambda instead of the a. The font here is Myriad Pro but this would work with any good sans-serif font. It's color-agnostic, so it can be easily printer, presented as white on black or changed to a different color.<br />
<br />
[[Image:Haskell_logo_bonus.png]]<br />
<br />
[[Image:Haskell_logo_bonus2.png]]<br />
<br />
--[[User:BONUS|BONUS]] 14:40, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Axman6-logo-1.0.png]]<br />
<br />
--[[User:Axman6|Axman6]] 15:16, 16 December 2008 (UTC)<br />
<br />
<br />
[[image:Haskell_girl.jpg]]<br />
<br />
<br />
Oh, didn't know png's would work.<br />
--[[User:Tindrum|Tindrum]] 17:12, 16 December 2008 (UTC)<br />
<br />
----<br />
<br />
[[image:Haskell_logo.png]]<br />
<br />
It is mutually recursive...<br />
Here is the [[Media:Haskell logo.svg|svg]].<br />
<br />
--[[User:Trontonic|Trontonic]] 20:39, 16 December 2008 (UTC)<br />
<br />
----<br />
This is a variation on my [http://t-shirts.cafepress.com/item/lambda-revolution-fitted-tshirt/96543210 Cafepress t-shirt]. The PNG is generated from an Inkscape SVG.<br />
<br />
[[Image:Haskell-logo-revolution.png]]</div>PaulJohnsonhttps://wiki.haskell.org/File:Haskell-logo-revolution.pngFile:Haskell-logo-revolution.png2008-12-16T20:59:32Z<p>PaulJohnson: Haskell as revolution</p>
<hr />
<div>Haskell as revolution</div>PaulJohnsonhttps://wiki.haskell.org/Library_testsLibrary tests2007-03-21T20:14:38Z<p>PaulJohnson: Talk a bit about testing with typeclasses.</p>
<hr />
<div>== Goals ==<br />
<br />
# Help library developers ensure that their changes work.<br />
# Enable something like [http://hackage.haskell.org/trac/ghc/wiki/BuildBot BuildBot] to ensure that libraries keep working across all the [[Implementations]].<br />
# Enable test-driven development if a developer wants to use it.<br />
# Provide a series of testcases for implementation developers.<br />
<br />
== Status ==<br />
<br />
According to Ian Lynagh, SimonM has been moving tests a directory at a time from the [http://darcs.haskell.org/testsuite/ testsuite] package that comes with ghc to libraries/foo/tests. It looks like he's gotten to [http://darcs.haskell.org/packages/unix/tests/ unix] and [http://darcs.haskell.org/packages/network/tests/ network]. The tests "assume the package is part of a GHC build tree with the testsuite installed in ../../../testsuite."<br />
<br />
Neil Mitchell has a program at http://www.cs.york.ac.uk/fp/darcs/filepath/GenTests.hs to automatically extract tests from Haddock comments like the ones in http://www.cs.york.ac.uk/fp/darcs/filepath/System/FilePath/Version_0_11.hs. <br />
<br />
== Design ==<br />
<br />
I think the tests should be run with <code>runhaskell Setup.hs test</code>. Cabal's going to need some work to make this work portably. [[User:JeffreyYasskin|JeffreyYasskin]] 06:39, 21 March 2007 (UTC)<br />
<br />
=== Abbreviated QuickCheck in Haddock comments ===<br />
<br />
Need to recognise parameters. GenTests.hs currently recognises a small range of special variables. What about declaring the parameter names and associated types in a header comment? For instance<br />
<br />
-- > :type xs, ys :: [Int]<br />
<br />
this would declare that xs and ys are free variables in any following tests and of the type specified. They can then be recognised at the lexical level.<br />
<br />
Alternatively, what about special "forall" syntax such as:<br />
<br />
forall (xs, ys :: [Int]) . reverse xs ++ reverse ys == reverse (ys ++ xs)<br />
<br />
: The problem is that xs and ys are actually of type <hask>forall a. [a]</hask>, and we don't want to mislead people who are reading the documentation. We could automatically substitute <hask>Int</hask> for type variables in forall expressions (which are easy to recognize because they're lower case and between the "::" and the "."). So: <haskell>-- > forall (xs, ys) :: (MyTyCon a b, MyTyCon a b) . myprop xs ys</haskell> means QuickCheck will see <haskell>prop_N = \xs ys -> myprop xs ys where types = (xs, ys) :: (MyTyCon Int Int, MyTyCon Int Int)</haskell><br />
: It's likely we'd also eventually need similar defaulting for particular typeclasses, which might force us to integrate more of Haskell than we'd like... [[User:JeffreyYasskin|JeffreyYasskin]] 07:06, 21 March 2007 (UTC)<br />
<br />
: Oops, I didn't make myself clear. I was thinking of the QuickCheck "forAll" function rather than the "forall" type keyword. What I wanted to say was that we need a way to represent the QuickCheck idiom of <haskell> prop_myTest = forAll myGenerator $ \(x, y) -> myProperty x y </haskell>. <br />
<br />
: In the ranged sets library I needed to ensure that properties held for sets of Ints and Reals because they were handled differently (due to the fact that <hask>x > 4</hask> is equivalent to <hask>x >= 5</hask> for <hask>x :: Int</hask> but not for <hask>x :: Real</hask>. The library expresses this distinction with <hask>class DiscreteOrdered</hask>. Is this the kind of thing you had in mind when you said "defaulting for particular typeclasses"? If so then optionally wrapping the :type lines in an outer structure might work. [[User:PaulJohnson|PaulJohnson]] 20:14, 21 March 2007 (UTC)<br />
<br />
GenTests currently has flag syntax for Posix and Windows tests (necessary for FilePath). Should this be in a general solution? If so, are other flags required?<br />
<br />
: I think we need something with the same functionality. Posix- and Windows-specific tests are relatively easy. You just write the property directly in terms of qualified names. The needed imports could be specified in a recognized <haskell>-- > import Foo as F</haskell> comment toward the top of the file. Doing generic tests that should hold over several modules (or several typeclass instances?) is harder. If overloading <hask>forall</hask> works, maybe: <haskell>-- > forall [x <- ["P", "W"]] . x.isPathSeparator x.pathSeparator</haskell>[[User:JeffreyYasskin|JeffreyYasskin]] 07:06, 21 March 2007 (UTC)<br />
<br />
<br />
=== <hask>#ifdef</hask>ed tests in code ===<br />
<br />
http://darcs.haskell.org/packages/base/Data/Map.hs could easily be moved to this form if we replace the <hask>{- ... Testing ... -}</hask> comments with <hask>#ifdef TESTING .... #endif</hask>. We'll need to extend Haddock to be able to copy function bodies into the generated documentation.<br />
<br />
This poses some problems for arranging the compiled output. The #define flags generally don't show up in the name of the output file, but we want to make sure that even if you've run the tests, <code>runhaskell Setup.hs install</code> installs the non-testing libraries.<br />
<br />
We could probably re-build all of the libraries in a separate <code>dist/test/</code> tree with -DTESTING on. If we have A.hs and B.hs where each exports some implementation functions behind <hask>#ifdef TESTING</hask>, this gives B's tests access to A's private functions. Is that a problem? [[User:JeffreyYasskin|JeffreyYasskin]] 06:39, 21 March 2007 (UTC)<br />
<br />
=== Separate test programs ===<br />
<br />
Should be in the style of http://darcs.haskell.org/packages/network/tests/, but with a driver that doesn't depend on living inside a ghc source tree.<br />
<br />
I personally dislike the "golden file" approach that these test use, but the [http://hackage.haskell.org/trac/ghc/wiki/Building/RunningTests#Addinganewtest existing driver] also supports a <code>run_command_ignore_output</code> test-fn, which we could combine with the <code>exit_code(0)</code> opt-fn to use any testing framework we want. [[User:JeffreyYasskin|JeffreyYasskin]] 06:39, 21 March 2007 (UTC)</div>PaulJohnsonhttps://wiki.haskell.org/Library_testsLibrary tests2007-03-21T19:48:02Z<p>PaulJohnson: Clarified "forAll"</p>
<hr />
<div>== Goals ==<br />
<br />
# Help library developers ensure that their changes work.<br />
# Enable something like [http://hackage.haskell.org/trac/ghc/wiki/BuildBot BuildBot] to ensure that libraries keep working across all the [[Implementations]].<br />
# Enable test-driven development if a developer wants to use it.<br />
# Provide a series of testcases for implementation developers.<br />
<br />
== Status ==<br />
<br />
According to Ian Lynagh, SimonM has been moving tests a directory at a time from the [http://darcs.haskell.org/testsuite/ testsuite] package that comes with ghc to libraries/foo/tests. It looks like he's gotten to [http://darcs.haskell.org/packages/unix/tests/ unix] and [http://darcs.haskell.org/packages/network/tests/ network]. The tests "assume the package is part of a GHC build tree with the testsuite installed in ../../../testsuite."<br />
<br />
Neil Mitchell has a program at http://www.cs.york.ac.uk/fp/darcs/filepath/GenTests.hs to automatically extract tests from Haddock comments like the ones in http://www.cs.york.ac.uk/fp/darcs/filepath/System/FilePath/Version_0_11.hs. <br />
<br />
== Design ==<br />
<br />
I think the tests should be run with <code>runhaskell Setup.hs test</code>. Cabal's going to need some work to make this work portably. [[User:JeffreyYasskin|JeffreyYasskin]] 06:39, 21 March 2007 (UTC)<br />
<br />
=== Abbreviated QuickCheck in Haddock comments ===<br />
<br />
Need to recognise parameters. GenTests.hs currently recognises a small range of special variables. What about declaring the parameter names and associated types in a header comment? For instance<br />
<br />
-- > :type xs, ys :: [Int]<br />
<br />
this would declare that xs and ys are free variables in any following tests and of the type specified. They can then be recognised at the lexical level.<br />
<br />
Alternatively, what about special "forall" syntax such as:<br />
<br />
forall (xs, ys :: [Int]) . reverse xs ++ reverse ys == reverse (ys ++ xs)<br />
<br />
: The problem is that xs and ys are actually of type <hask>forall a. [a]</hask>, and we don't want to mislead people who are reading the documentation. We could automatically substitute <hask>Int</hask> for type variables in forall expressions (which are easy to recognize because they're lower case and between the "::" and the "."). So: <haskell>-- > forall (xs, ys) :: (MyTyCon a b, MyTyCon a b) . myprop xs ys</haskell> means QuickCheck will see <haskell>prop_N = \xs ys -> myprop xs ys where types = (xs, ys) :: (MyTyCon Int Int, MyTyCon Int Int)</haskell><br />
: It's likely we'd also eventually need similar defaulting for particular typeclasses, which might force us to integrate more of Haskell than we'd like... [[User:JeffreyYasskin|JeffreyYasskin]] 07:06, 21 March 2007 (UTC)<br />
<br />
: Oops, I didn't make myself clear. I was thinking of the QuickCheck "forAll" function rather than the "forall" type keyword. What I wanted to say was that we need a way to represent the QuickCheck idiom of <haskell> prop_myTest = forAll myGenerator $ \(x, y) -> myProperty x y </haskell>. [[User:PaulJohnson|PaulJohnson]] 19:48, 21 March 2007 (UTC)<br />
<br />
GenTests currently has flag syntax for Posix and Windows tests (necessary for FilePath). Should this be in a general solution? If so, are other flags required?<br />
<br />
: I think we need something with the same functionality. Posix- and Windows-specific tests are relatively easy. You just write the property directly in terms of qualified names. The needed imports could be specified in a recognized <haskell>-- > import Foo as F</haskell> comment toward the top of the file. Doing generic tests that should hold over several modules (or several typeclass instances?) is harder. If overloading <hask>forall</hask> works, maybe: <haskell>-- > forall [x <- ["P", "W"]] . x.isPathSeparator x.pathSeparator</haskell>[[User:JeffreyYasskin|JeffreyYasskin]] 07:06, 21 March 2007 (UTC)<br />
<br />
<br />
=== <hask>#ifdef</hask>ed tests in code ===<br />
<br />
http://darcs.haskell.org/packages/base/Data/Map.hs could easily be moved to this form if we replace the <hask>{- ... Testing ... -}</hask> comments with <hask>#ifdef TESTING .... #endif</hask>. We'll need to extend Haddock to be able to copy function bodies into the generated documentation.<br />
<br />
This poses some problems for arranging the compiled output. The #define flags generally don't show up in the name of the output file, but we want to make sure that even if you've run the tests, <code>runhaskell Setup.hs install</code> installs the non-testing libraries.<br />
<br />
We could probably re-build all of the libraries in a separate <code>dist/test/</code> tree with -DTESTING on. If we have A.hs and B.hs where each exports some implementation functions behind <hask>#ifdef TESTING</hask>, this gives B's tests access to A's private functions. Is that a problem? [[User:JeffreyYasskin|JeffreyYasskin]] 06:39, 21 March 2007 (UTC)<br />
<br />
=== Separate test programs ===<br />
<br />
Should be in the style of http://darcs.haskell.org/packages/network/tests/, but with a driver that doesn't depend on living inside a ghc source tree.<br />
<br />
I personally dislike the "golden file" approach that these test use, but the [http://hackage.haskell.org/trac/ghc/wiki/Building/RunningTests#Addinganewtest existing driver] also supports a <code>run_command_ignore_output</code> test-fn, which we could combine with the <code>exit_code(0)</code> opt-fn to use any testing framework we want. [[User:JeffreyYasskin|JeffreyYasskin]] 06:39, 21 March 2007 (UTC)</div>PaulJohnsonhttps://wiki.haskell.org/Library_testsLibrary tests2007-03-19T22:12:10Z<p>PaulJohnson: In the middle of changing.</p>
<hr />
<div>== Goals ==<br />
<br />
# Help library developers ensure that their changes work.<br />
# Enable something like [http://hackage.haskell.org/trac/ghc/wiki/BuildBot BuildBot] to ensure that libraries keep working across all the [[Implementations]].<br />
# Enable test-driven development if a developer wants to use it.<br />
# Provide a series of testcases for implementation developers.<br />
<br />
== Status ==<br />
<br />
According to Ian Lynagh, SimonM has been moving tests a directory at a time from the [http://darcs.haskell.org/testsuite/ testsuite] package that comes with ghc to libraries/foo/tests. It looks like he's gotten to [http://darcs.haskell.org/packages/unix/tests/ unix] and [http://darcs.haskell.org/packages/network/tests/ network]. The tests "assume the package is part of a GHC build tree with the testsuite installed in ../../../testsuite."<br />
<br />
Neil Mitchell has a program at http://www.cs.york.ac.uk/fp/darcs/filepath/GenTests.hs to automatically extract tests from Haddock comments like the ones in http://www.cs.york.ac.uk/fp/darcs/filepath/System/FilePath/Version_0_11.hs. <br />
<br />
== Design ==<br />
<br />
Need to recognise parameters. GenTests.hs currently recognises a small range of special variables. What about declaring the parameter names and associated types in a header comment? For instance<br />
<br />
-- > :type xs, ys :: [Int]<br />
<br />
this would declare that xs and ys are free variables in any following tests and of the type specified. They can then be recognised at the lexical level.<br />
<br />
Alternatively, what about special "forall" syntax such as:<br />
<br />
forall (xs, ys :: [Int]) . reverse xs ++ reverse ys == reverse (ys ++ xs)<br />
<br />
GenTests currently has flag syntax for Posix and Windows tests (necessary for FilePath). Should this be in a general solution? If so, are other flags required?<br />
<br />
Do we need special syntax for</div>PaulJohnsonhttps://wiki.haskell.org/Haddock/Development_ideasHaddock/Development ideas2006-11-01T11:57:01Z<p>PaulJohnson: Recursive directories</p>
<hr />
<div>There would be a number of benefits if [[GHC]]'s parser were extended to understand the [[Haddock]] documentation markup and then Haddock changed to use the [[GHC/As a library|GHC API]]:<br />
<br />
* Haddock would get full supprot for GHC's various syntactic extensions.<br />
* Haddock would understand <code>{#- LINE -#}</code> pragmas which would allow it to generate links to the original source code.<br />
* Haddock would get much better error messages.<br />
* Haddock could infer types for functions with no explicit type signature.<br />
* GHCi and IDEs like [[hIDE]] and [[Visual Haskell]] would be able to display API documentation in more convenient ways like in this [http://haste.dyndns.org:8080/ Haste] screenshot:<br />
[[Image:Haste_screenshot_hovering.png]]<br />
<br />
It would be good to have a recursive flag that would operate on all the .hs and .lhs files under a single directory.</div>PaulJohnsonhttps://wiki.haskell.org/HaskellHaskell2006-08-19T20:37:59Z<p>PaulJohnson: Removed Haskell advocacy. It doesn't fit here after all.</p>
<hr />
<div>[[Image:Haskelllogo-small.jpg|center|Haskell - A purely functional language]]<br />
<br />
<center><br />
Haskell is a general purpose, purely functional programming language. Haskell compilers are freely available for almost any computer.<br />
</center><br />
__NOTOC__<br />
<center><br />
{| border=0 cellspacing=5 cellpadding=15<br />
| valign=top bgcolor=#F0F0F0 style="text-align:left" |<br />
== About ==<br />
<br />
* [[Introduction]]<br />
* [[Language and library specification|Language specification]]<br />
* [[Haskell in practice]]<br />
* [[Haskell in education]]<br />
* [http://www.haskell.org/haskell-history.html History]<br />
* [[Future]]<br />
* [[Implementations]]<br />
** [http://haskell.org/hugs Hugs]<br />
** [http://haskell.org/ghc GHC]<br />
<br />
== Learning ==<br />
<br />
* [[Haskell in 5 steps]]<br />
* [[Learning|Getting started]]<br />
* [[Books and tutorials]]<br />
* [[Research papers|Research]]<br />
* [[Questions and answers]]<br />
<br />
== Documentation ==<br />
<br />
* [http://haskell.org/ghc/docs/latest/html/libraries/ Standard libraries]<br />
* [[Libraries and tools]]<br />
* [http://haskell.org/hoogle Hoogle] - library search<br />
* [[Special:Categories|Wiki articles]] <br />
* [http://haskell.org/hawiki/ Old wiki articles]<br />
* [[ExampleCode|Haskell examples]]<br />
<br />
== Community ==<br />
<br />
* [[Mailing lists]]<br />
* [http://haskell.org/communities/ Communities and projects]<br />
* [[Haskell Weekly News|Weekly news]]<br />
* [[IRC channel|Internet Relay Chat (IRC)]]<br />
* [http://planet.haskell.org/ Planet Haskell (blogs)]<br />
* [[Links|Haskell people]]<br />
* [[Jobs]]<br />
* [[Consultants]]<br />
* [[Humor]]<br />
* [[Merchandise]]<br />
* [[HaskellWiki:Contributing|Contributing]]<br />
* [[haskell.org|Using haskell.org]]<br />
<br />
|valign=top bgcolor=#F0F0F0 width=65% style="text-align:left"|<br />
<br />
== Events ==<br />
{{:Events}}<br />
<br />
== News ==<br />
<br />
* Simon Peyton Jones, Paul Hudak, John Hughes, and Philip Wadler invite your comments on a draft paper entitled [[History_of_Haskell|The History of Haskell]]. Feedback before mid-August 2006 would be particularly valuable.<br />
<br />
* The [http://hackage.haskell.org/trac/haskell-prime Haskell-prime] committee has started work on defining the next minor revision of the language specification.<br />
<br />
* ''"Haskell is the programming tool of choice for discriminating hackers"'' for the second year running!<br />The teams winning first and third place in the [http://icfpc.plt-scheme.org/ ICFP 2005 programming contest] both used Haskell.<br />
<br />
{{:News}}<br />
<br />
|}<br />
</center></div>PaulJohnsonhttps://wiki.haskell.org/AdvocacyAdvocacy2006-08-19T20:37:13Z<p>PaulJohnson: Deleted the text. It doesn't fit here after all. I'll finish it and publish it somewhere else.</p>
<hr />
<div></div>PaulJohnsonhttps://wiki.haskell.org/AdvocacyAdvocacy2006-08-19T18:38:24Z<p>PaulJohnson: Added yet more.</p>
<hr />
<div>Note: this page is under development.<br />
<br />
== Haskell Advocacy ==<br />
<br />
=== At Work ===<br />
<br />
Many people wonder why a language offering between 4 and 10 times better productivity hasn't swept the software industry yet. If you are working in the industry then you may already have had some conversations with managers about the possibility of introducing Haskell, and found that they always have some reason why this is not the right time or place. Maybe in a few months, or on another project. But not this one. <br />
<br />
This page is intended to help programmers understand what the real obstacles are and how to overcome them.<br />
<br />
==== Management Structure ====<br />
<br />
Any large technical organisation can be divided into three groups. At the top you have senior management, who are there to set the overall strategy of the organisation and make sure that the big things happen to keep the organisation doing what it does as the world changes around it. In the middle are the middle management who take the big strategic plans and turn them into discrete projects and work packages, and at the bottom are the engineers who actually do the work. The work of the middle managers is often described as "tactical" management in contrast to the strategic work of the senior management.<br />
<br />
Thats the theory. In fact things are not actually this simple. The middle managers are generally fully occupied with the "day job" of keeping the organisation ticking over, serving customers, meeting deadlines and generally making sure that the organisation does tomorrow what it is doing today. Any large organisation can only survive if these people are really good at this job and pay close attention to it, to the exclusion of almost anything else. And so large organisations have evolved a set of mechanisms to ensure this. Whole books have been written about how the senior management can motivate these people to do their jobs as well as humanly possible. So whenever you talk to one of these people about change, their first thought is how it is going to affect their primary job, because their whole environment is designed to focus their minds on that question. If it makes that job harder in the short term, they won't want to know. And this is in fact a good thing, because if middle managers didn't keep a laser-like focus on doing their jobs well the organisation would not survive. <br />
<br />
==== Senior Management ====<br />
<br />
Talking to middle managers about change is generally an exercise in frustration. So lets cut out the middle men and go straight to the top. Typically you don't want to talk to the chief executive: strategic technology decisions belong to the Chief Technology Officer (CTO) or someone with a similar title. However even if you manage to speak to this person and persuade them that you are on to something, the first thing they will do is talk to their immediate subordinates. These are often the same middle managers who were not interested in your idea in the first place, and they will tell the CTO exactly the same things. Even if the CTO overrides his staff, these are also the people who will actually execute the strategy. They will systematically deprive this initiative of resources, not because they directly object to the idea, but because there is always something more urgent. Its that focus on the day job again.<br />
<br />
=== A Plan of Campaign ===<br />
<br />
By now it should be obvious that simply walking into someone's office and telling them about a new technology is not going to result in immediate and radical change. You need to plan and execute a sales and marketing campaign designed to convince people at several levels of the organisation that they need to support this change. This requires a lot of hard work, a lot of talking to people about people things, and almost no technology at all. If you are not up for this then forget it.<br />
<br />
==== Who to Talk To ====<br />
<br />
The first thing to do is find out who the important technology people are in the organisation. Most senior managers seriously over-worked and do not have time to know about technology, so they delegate the job of knowing about technology to someone else. You need to find this person (or sometimes, people). They are probably not evident on the organisational chart. The easiest way is probably to email the CTO himself asking who you should talk to about ways to improve software productivity. With luck they will point you at someone who looks junior on the organisation chart but who's judgement they have learned to trust.<br />
<br />
If on the other hand the CTO points you at an immediate subordinate.</div>PaulJohnsonhttps://wiki.haskell.org/AdvocacyAdvocacy2006-08-19T15:37:52Z<p>PaulJohnson: Addded some more.</p>
<hr />
<div>Note: this page is under development.<br />
<br />
== Haskell Advocacy ==<br />
<br />
=== At Work ===<br />
<br />
Many people wonder why a language offering between 4 and 10 times better productivity hasn't swept the software industry yet. If you are working in the industry then you may already have had some conversations with managers about the possibility of introducing Haskell, and found that they always have some reason why this is not the right time or place. Maybe in a few months, or on another project. But not this one. <br />
<br />
This page is intended to help programmers understand what the real obstacles are and how to overcome them.<br />
<br />
==== Management Structure ====<br />
<br />
Any large technical organisation can be divided into three groups. At the top you have senior management, who are there to set the overall strategy of the organisation and make sure that the big things happen to keep the organisation doing what it does as the world changes around it. In the middle are the middle management who take the big strategic plans and turn them into discrete projects and work packages, and at the bottom are the engineers who actually do the work.<br />
<br />
Thats the theory. In fact things are not actually this simple. The middle managers are generally fully occupied with the "day job" of keeping the organisation ticking over, serving customers, meeting deadlines and generally making sure that the organisation does tomorrow what it is doing today. Any large organisation can only survive if these people are really good at this job and pay close attention to it, to the exclusion of almost anything else. And so large organisations have evolved a set of mechanisms to ensure this. Whole books have been written about how the senior management can motivate these people to do their jobs as well as humanly possible. So whenever you talk to one of these people about change, their first thought is how it is going to affect their primary job. If it makes that job harder, they won't want to know. And this is in fact a good thing, because if middle managers didn't keep a laser-like focus on doing their jobs well the organisation would not survive. <br />
<br />
==== Senior Management ====<br />
<br />
Talking to middle managers about change is generally an exercise in frustration. So lets cut out the middle men and go straight to the top. Someone like the "Chief Technology Officer".</div>PaulJohnsonhttps://wiki.haskell.org/AdvocacyAdvocacy2006-08-19T15:25:58Z<p>PaulJohnson: Started editing</p>
<hr />
<div>Note: this page is under development.<br />
<br />
== Haskell Advocacy ==<br />
<br />
=== At Work ===<br />
<br />
Many people wonder why a language offering between 4 and 10 times better productivity hasn't swept the software industry yet. If you are working in the industry then you may already have had some conversations with managers about the possibility of introducing Haskell, and found that they always have some reason why this is not the right time or place. Maybe in a few months, or on another project. But not this one. <br />
<br />
This page is intended to help programmers understand what the real obstacles are and how to overcome them.<br />
<br />
==== Organisational Structure ====<br />
<br />
Any large technical organisation can be divided into three groups. At the top you have senior management, who are there to set the overall strategy of the organisation and make sure that the big things happen to keep the organisation doing what it does as the world changes around it. In the middle are the middle management who take the big strategic plans and turn them into discrete projects and work packages, and at the bottom are the engineers who actually do the work.</div>PaulJohnsonhttps://wiki.haskell.org/HaskellHaskell2006-08-19T15:09:31Z<p>PaulJohnson: Added Advocacy</p>
<hr />
<div>[[Image:Haskelllogo-small.jpg|center|Haskell - A purely functional language]]<br />
<br />
<center><br />
Haskell is a general purpose, purely functional programming language. Haskell compilers are freely available for almost any computer.<br />
</center><br />
__NOTOC__<br />
<center><br />
{| border=0 cellspacing=5 cellpadding=15<br />
| valign=top bgcolor=#F0F0F0 style="text-align:left" |<br />
== About ==<br />
<br />
* [[Introduction]]<br />
* [[Language and library specification|Language specification]]<br />
* [[Haskell in practice]]<br />
* [[Haskell in education]]<br />
* [http://www.haskell.org/haskell-history.html History]<br />
* [[Future]]<br />
* [[Implementations]]<br />
** [http://haskell.org/hugs Hugs]<br />
** [http://haskell.org/ghc GHC]<br />
<br />
== Learning ==<br />
<br />
* [[Haskell in 5 steps]]<br />
* [[Learning|Getting started]]<br />
* [[Books and tutorials]]<br />
* [[Research papers|Research]]<br />
* [[Questions and answers]]<br />
<br />
== Documentation ==<br />
<br />
* [http://haskell.org/ghc/docs/latest/html/libraries/ Standard libraries]<br />
* [[Libraries and tools]]<br />
* [http://haskell.org/hoogle Hoogle] - library search<br />
* [[Special:Categories|Wiki articles]] <br />
* [http://haskell.org/hawiki/ Old wiki articles]<br />
* [[ExampleCode|Haskell examples]]<br />
<br />
== Community ==<br />
<br />
* [[Mailing lists]]<br />
* [http://haskell.org/communities/ Communities and projects]<br />
* [[Haskell Weekly News|Weekly news]]<br />
* [[IRC channel|Internet Relay Chat (IRC)]]<br />
* [http://planet.haskell.org/ Planet Haskell (blogs)]<br />
* [[Advocacy|Haskell Advocacy]]<br />
* [[Links|Haskell people]]<br />
* [[Jobs]]<br />
* [[Consultants]]<br />
* [[Humor]]<br />
* [[Merchandise]]<br />
* [[HaskellWiki:Contributing|Contributing]]<br />
* [[haskell.org|Using haskell.org]]<br />
<br />
|valign=top bgcolor=#F0F0F0 width=65% style="text-align:left"|<br />
<br />
== Events ==<br />
{{:Events}}<br />
<br />
== News ==<br />
<br />
* Simon Peyton Jones, Paul Hudak, John Hughes, and Philip Wadler invite your comments on a draft paper entitled [[History_of_Haskell|The History of Haskell]]. Feedback before mid-August 2006 would be particularly valuable.<br />
<br />
* The [http://hackage.haskell.org/trac/haskell-prime Haskell-prime] committee has started work on defining the next minor revision of the language specification.<br />
<br />
* ''"Haskell is the programming tool of choice for discriminating hackers"'' for the second year running!<br />The teams winning first and third place in the [http://icfpc.plt-scheme.org/ ICFP 2005 programming contest] both used Haskell.<br />
<br />
{{:News}}<br />
<br />
|}<br />
</center></div>PaulJohnsonhttps://wiki.haskell.org/Haskell.orgHaskell.org2006-08-14T18:14:58Z<p>PaulJohnson: Added PaulAJ</p>
<hr />
<div>= About haskell.org =<br />
<br />
Haskell.org is a resource for the entire Haskell community. If you would like to use haskell.org to host your project or contribute to the Haskell community in some way, please contact us and let us know what you need.<br />
<br />
<br />
== Contacts at Haskell.org ==<br />
<br />
This machine lives at Yale University and maintained by Yale's Workstation Support people. They provide OS patches, backups, and Internet connectivity. Paul Hudak generously provides the funding that keeps this machine going.<br />
<br />
Here are the people that you should contact if you need something on haskell.org:<br />
* [mailto:jpeterson@western.edu John Peterson] handles most of the requests for haskell.org services. He can usually answer any questions you have. Email him if you would like an account.<br />
* [mailto:mark.wogahn@yale.edu Mark Wogahn] works for workstation support at Yale. If you have questions about how the machine is administered you can ask him. If you need something done differently, go through John.<br />
<br />
== Services on haskell.org ==<br />
<br />
This machine is used mainly for the wiki and to host projects - anyone is welcome to create a home page for their project here. You can also install services here as long as they don't overwhelm haskell.org and are of interest to the Haskell community. If you need a repository, that is usually done at darcs.haskell.org (or cvs.haskell.org).<br />
<br />
<br />
== Accounts on haskell.org ==<br />
Please add yourself to this list if you have an account at haskell.org. Everyone with an account here should also have a wiki account with a home page that provides basic contact information.<br />
{|<br />
!width=50| Account<br />
!width=120| Owner<br />
!width=500| Purpose<br />
|-<br />
| jcp || [[user:John Peterson| John Peterson]] || Administration of haskell.org<br />
|-<br />
| ndm/neil || [[user:NeilMitchell|Neil Mitchell]] || Hoogle and WinHugs<br />
|-<br />
| duncan || [[user:DuncanCoutts| Duncan Coutts]] || Gtk2Hs website<br />
|-<br />
| simona || Axel Simon || Gtk2Hs website<br />
|-<br />
| bringert || [[user:BjornBringert|Bjorn Bringert]] || HTTP and HaXR websites<br />
|-<br />
| antony || [[user:AntonyCourtney|Antony Courtney]] || Yampa<br />
|-<br />
| nr || [[user:NormanRamsey| Norman Ramsey]] || occasional GHC hacking<br />
|-<br />
| PaulJohnson || [[user:PaulJohnson| Paul Johnson]] || Writing occasional helpful stuff and sample code<br />
|}</div>PaulJohnsonhttps://wiki.haskell.org/User:PaulJohnsonUser:PaulJohnson2006-08-14T18:12:48Z<p>PaulJohnson: </p>
<hr />
<div>Name: Paul Johnson<br />
<br />
IRC nick: PaulAJ<br />
<br />
Email: paul at cogito dot org dot uk<br />
<br />
Real world location: Fareham, Hampshire, UK.<br />
<br />
Employer: NATS (UK air traffic control company)</div>PaulJohnsonhttps://wiki.haskell.org/User:PaulJohnsonUser:PaulJohnson2006-08-14T18:12:31Z<p>PaulJohnson: Created page.</p>
<hr />
<div>Name: Paul Johnson<br />
IRC nick: PaulAJ<br />
Email: paul at cogito dot org dot uk<br />
Real world location: Fareham, Hampshire, UK.<br />
Employer: NATS (UK air traffic control company)</div>PaulJohnsonhttps://wiki.haskell.org/AngloHaskell/2007AngloHaskell/20072006-07-31T19:38:27Z<p>PaulJohnson: Added my talk subject.</p>
<hr />
<div>On June the 9th, Microsoft Research sent out an advert for a job. This job involves maintaining the Glorious Glasgow Compiler, and created quite a stir in the Haskell community: It's the job we've all been hoping for! After a while the CV's were sent, and Microsoft Research has now invited several Haskellers for an interview at Cambridge, UK.<br />
<br />
This event has been recognized as a great opportunity for a Haskell gathering and we hereby invite all Haskellers (and other cool people) to a fun couple of days in Cambridge.<br />
<br />
Date:<br />
* Friday the 4th and Saturday the 5th of August.<br />
<br />
Contact person:<br />
Shae Erisson - +46 70 3915045<br />
<br />
Local contact:<br />
Ganesh Sittampalam - 07968 253467 (+44 7968 253467 from a non-UK phone)<br />
<br />
If you're coming into Cambridge by train and want to join in the fun, call Shae at the number above.<br />
<br />
== Directions to MSR ==<br />
<br />
MSR has [http://research.microsoft.com/aboutmsr/visitmsr/cambridge/directions.aspx some directions], which can be best summarised as ‘get a taxi’. Here is (hopefully) a [http://earth.google.com/ Google Earth] [[Media:Microsoft_Research,_Cambridge.kmz|location]] of MSR, as well as a [http://maps.google.com/maps?q=CB3+0FB&ll=52.211499,0.117073&spn=0.02677,0.086517 Google Maps link]. (J J Thomson Avenue is immediately west of Clerk Maxwell Road.)<br />
<br />
If you do take a taxi and the driver doesn't know where it is, tell him or her to drive down Madingley Road until you reach the West Cambridge site, J J Thomson Avenue. The Computer Laboratory (next door) has [http://www.cl.cam.ac.uk/UoCCL/contacts/#gettinghere marginally better instructions].<br />
<br />
The fastest way to MSR (on foot and public transport) from the station is to [http://maps.google.com/maps?saddr=CB1+2JW&daddr=Trumpington+Road,+Cambridge cut through to Trumpington Road via Bateman Street] (don't follow the driving directions!), and take the Citi 4 or Uni 4. There's a bus stop just across the road from Bateman Street.<br />
<br />
To get to the city centre by bus, take the Citi 1 or Citi 3. Do ask to make sure they're going in the right direction though! There are also a number of clearly marked shuttle busses between the centre and station running during the day every 10 minutes or so.<br />
<br />
To walk to the centre (20 minutes not carrying luggage), go straight down the road facing you when you come out of the station, bear right when the road ends at some traffic lights / a WW1 memorial / the botanic gardens, and keep walking straight (Hills Road / Regent St / St Andrews St) for quite a while until you reach a pedestrianised bit, at which point you are in the centre.<br />
<br />
From the city centre to MSR, you can catch the number 77 Madingley Road Park and Ride which goes from bus stop M on Emma St. (Or find your way to Pembroke or Silver Street, and catch the Citi 4 / Uni 4 from there.)<br />
<br />
== Attendees ==<br />
<br />
=== Definite ===<br />
<br />
* Simon Peyton-Jones and Simon Marlow (Friday only)<br />
* Lemmih (will arrive the 2nd and leave the 6th)<br />
* PhilippaCowderoy (barring emergencies, can hang around)<br />
* ShaeErisson (can stay for a couple of days)<br />
* Peter Nuttall (am around from the 26 July onwards, baring the 3rd when I'm in ipswitch)<br />
* genneth (am in Cambridge anyway)<br />
* GaneshSittampalam (Heffalump) (for at least some of the time)<br />
* Neil Mitchell - ndm (can come for the 5th, if I can have some floor space)<br />
* Liyang HU<br />
* Robin Green (greenrd)<br />
* Dana N Xu<br />
<br />
=== Possible ===<br />
<br />
* dcoutts (depends on the date)<br />
* xerox (depends on the date)<br />
* GK (depends on the date; it'd be great to meet some of the wonderful Haskell community folks)<br />
* EdwinBrady (depends on the date; would probably stay a couple of days)<br />
* vincenz (depends on the date, preferably a day or two, partially weekend)<br />
** Would need details in advance to reserve ticket for EUROSTAR<br />
* Paul Johnson (paj) (paul at cogito dot org dot uk)<br />
** Almost certain. Looking for crash space or pointer to nearby cheap hotel<br />
<br />
== Lodging ==<br />
<br />
* Are there places we can crash, rooms we can share?<br />
** Bring your own sleeping bag, if using one of the crash spaces below!<br />
** dcoutts has offered floor space to a few, however, there may not be any left.<br />
** psnl (Pete Nuttall) has 14 sq metres of floor crash space in a college.<br />
<br />
== Programme ==<br />
<br />
Planning is taking place on IRC: #anglohaskell on irc.freenode.net<br />
<br />
=== Friday Talks ===<br />
<br />
* edwinb might "introduce '''dependent types''' then talk about [his] pet '''[http://www.dcs.st-and.ac.uk/~eb/Ivor/ theorem prover]'''"<br />
* greenrd is preparing a talk about simulating '''dependent types''' in Haskell, and using them for "categorical programming" (programming based on '''category theory''') and proving properties of code<br />
* Lemmih could give a short talk on breakpoints in GHC<br />
* Liyang is prepared to wave his arms in the air while not making much sense about ''idiomatic programming'' (and '''not just''' the ''applicative idioms'' you've witnessed previously...) with an additional helping of ''memoisation''.<br />
* Paul Johnson will give a talk on discrete event simulation.<br />
* Ganesh Sittampalam might talk about recent '''Darcs''' work involving patch theory<br />
<br />
=== Rest of Friday ===<br />
<br />
* Is there anything other than talks for Friday while we're still at MSR? If not, are there enough talks to warrant a morning start?<br />
* Where's lunch?<br />
* We're expecting to hit a pub or two after MSR before we all find our crashspace?<br />
* No doubt there're possibilities while at a pub other than beer and chat?<br />
* There's been mention of Go?<br />
* And other games that take less time to learn to play?<br />
* Do we have enough people who think they know the rules to get the Chairman's Game going? Can we avoid it turning turing complete?<br />
<br />
=== Saturday Stuff ===<br />
<br />
* some kind of '''coding / pair programming'''? Maybe on Saturday when we're not going to be at MSR (we haven't figured out where we will be yet)<br />
* We don't know what we're doing on Saturday yet!<br />
* Perhaps colonise a '''café''' in the morning 'til everyone's reasonably awake, then head for a '''pub''' or similar with '''wi-fi''' (perhaps the connection is less important?) for coding and/or more social geeking as per everyone's taste?<br />
<br />
<br />
== Miscellaneous ==<br />
<br />
* Please could everyone bring or make a nametag that identifies you by your real name and/or IRC name.<br />
<br />
[[Category:Events]]</div>PaulJohnsonhttps://wiki.haskell.org/AngloHaskell/2007AngloHaskell/20072006-07-30T17:44:27Z<p>PaulJohnson: </p>
<hr />
<div>On June the 9th, Microsoft Research sent out an advert for job. This job involves maintaining the Glorious Glasgow Compiler, and created quite a stir in the Haskell community: It's the job we've all been hoping for! After a while the CV's were sent, and Microsoft Research has now invited several Haskellers for an interview at Cambridge, UK.<br />
<br />
This event has been recognized as a great opportunity for a Haskell gathering and we hereby invite all Haskellers (and other cool people) to a fun couple of days in Cambridge.<br />
<br />
Date:<br />
* Friday the 4th and Saturday the 5th of August.<br />
<br />
Contact person:<br />
Shae Erisson - +46 70 3915045<br />
<br />
Local contact:<br />
Ganesh Sittampalam - 07968 253467 (+44 7968 253467 from a non-UK phone)<br />
<br />
If you're coming into Cambridge by train and want to join in the fun, call Shae at the number above.<br />
<br />
Travel information:<br />
<br />
Here are MSR's directions for getting to their site: http://research.microsoft.com/aboutmsr/visitmsr/cambridge/directions.aspx<br />
<br />
Here is (hopefully) a Google Earth file showing the location:<br />
[[Media:Microsoft_Research,_Cambridge.kmz]]<br />
<br />
They are rather unhelpful about methods of getting there once in Cambridge other than taxi. If you do take a taxi and the driver doesn't know where it is, tell him or her to drive down Madingley Road and it's the first left after "Clerk Maxwell Rd".<br />
<br />
If you want to take a bus, I (Ganesh) believe numbers 4 and 14 go there from the city centre. I might be able to provide more info about getting them if you prod me...<br />
<br />
From the railway station to get to the city centre, you can either walk (about 20 mins), or take a bus. To walk, go straight down the road facing you when you come out of the station, bear right when the road ends at some traffic lights, and keep walking straight for quite a while until you reach a pedestrianised bit, at which point you are in the centre. To take a bus, get on any bus that arrives and ask the driver if it's going to the centre. Some won't be, so make sure you do ask!<br />
<br />
Definite attendees:<br />
* Simon Peyton-Jones and Simon Marlow (Friday only)<br />
* Lemmih (will arrive the 2nd and leave the 6th)<br />
* PhilippaCowderoy (barring emergencies, can hang around)<br />
* ShaeErisson (can stay for a couple of days)<br />
* Peter Nuttall (am around from the 26 July onwards, baring the 3rd when I'm in ipswitch)<br />
* genneth (am in Cambridge anyway)<br />
* GaneshSittampalam (for at least some of the time)<br />
* Neil Mitchell - ndm (can come for the 5th, if I can have some floor space)<br />
* Liyang HU<br />
* greenrd<br />
<br />
Possible attendees:<br />
* dcoutts (depends on the date)<br />
* xerox (depends on the date)<br />
* GK (depends on the date; it'd be great to meet some of the wonderful Haskell community folks)<br />
* EdwinBrady (depends on the date; would probably stay a couple of days)<br />
* vincenz (depends on the date, preferably a day or two, partially weekend)<br />
** Would need details in advance to reserve ticket for EUROSTAR<br />
* Paul Johnson (paj) (paul at cogito dot org dot uk)<br />
** Almost certain. Looking for crash space or pointer to nearby cheap hotel<br />
<br />
Lodging:<br />
* Are there places we can crash, rooms we can share?<br />
** If dcoutts goes then he can probably offer floor space to a few.<br />
** I (psnl) have 14 sq metres of floor crash space in a college.<br />
<br />
Programme:<br />
* Is there a more concrete plan? What exactly are we doing?<br />
** Planning is taking place on IRC: #anglohaskell on irc.freenode.net<br />
** Talks:<br />
*** greenrd wants to talk about simulating dependent types in Haskell<br />
*** Lemmih could give a short talk on breakpoints in GHC<br />
*** Liyang is prepared to wave his arms in the air while not making much sense about idiomatic programming (and '''not just''' the ''applicative idioms'' you've witnessed previously...) with an additional helping of memoisation.<br />
** some kind of coding / pair programming? Maybe set aside one of the two days for this?<br />
<br />
Miscellaneous:<br />
* Please could everyone bring or make a nametag that identifies you by your real name and/or IRC name.</div>PaulJohnsonhttps://wiki.haskell.org/File:Microsoft_Research,_Cambridge.kmzFile:Microsoft Research, Cambridge.kmz2006-07-30T17:42:10Z<p>PaulJohnson: This is where Microsoft Research is located in Cambridge.</p>
<hr />
<div>This is where Microsoft Research is located in Cambridge.</div>PaulJohnsonhttps://wiki.haskell.org/AngloHaskell/2007AngloHaskell/20072006-07-30T06:27:46Z<p>PaulJohnson: Added me.</p>
<hr />
<div>On June the 9th, Microsoft Research sent out an advert for job. This job involves maintaining the Glorious Glasgow Compiler, and created quite a stir in the Haskell community: It's the job we've all been hoping for! After a while the CV's were sent, and Microsoft Research has now invited several Haskellers for an interview at Cambridge, UK.<br />
<br />
This event has been recognized as a great opportunity for a Haskell gathering and we hereby invite all Haskellers (and other cool people) to a fun couple of days in Cambridge.<br />
<br />
Date:<br />
* Friday the 4th and Saturday the 5th of August.<br />
<br />
Contact person:<br />
Shae Erisson - +46 70 3915045<br />
<br />
If you're coming into Cambridge by train and want to join in the fun, call Shae at the number above.<br />
<br />
Definite attendees:<br />
* Simon Peyton-Jones and Simon Marlow (Friday only)<br />
* Lemmih (will arrive the 2nd and leave the 6th)<br />
* PhilippaCowderoy (barring emergencies, can hang around)<br />
* ShaeErisson (can stay for a couple of days)<br />
* Peter Nuttall (am around from the 26 July onwards, baring the 3rd when I'm in ipswitch)<br />
* genneth (am in Cambridge anyway)<br />
* GaneshSittampalam (for at least some of the time)<br />
* Neil Mitchell - ndm (can come for the 5th, if I can have some floor space)<br />
* Liyang HU<br />
* greenrd<br />
<br />
Possible attendees:<br />
* dcoutts (depends on the date)<br />
* xerox (depends on the date)<br />
* GK (depends on the date; it'd be great to meet some of the wonderful Haskell community folks)<br />
* EdwinBrady (depends on the date; would probably stay a couple of days)<br />
* vincenz (depends on the date, preferably a day or two, partially weekend)<br />
** Would need details in advance to reserve ticket for EUROSTAR<br />
* Paul Johnson (paj) (paul at cogito dot org dot uk)<br />
** Almost certain. Looking for crash space or pointer to nearby cheap hotel<br />
<br />
Lodging:<br />
* Are there places we can crash, rooms we can share?<br />
** If dcoutts goes then he can probably offer floor space to a few.<br />
** I (psnl) have 14 sq metres of floor crash space in a college.<br />
<br />
Programme:<br />
* Is there a more concrete plan? What exactly are we doing?<br />
** Planning is taking place on IRC: #anglohaskell on irc.freenode.net<br />
** Talks:<br />
*** greenrd wants to talk about simulating dependent types in Haskell<br />
*** Lemmih could give a short talk on breakpoints in GHC<br />
*** Liyang is prepared to wave his arms in the air while not making much sense about idiomatic programming (and '''not just''' the ''applicative idioms'' you've witnessed previously...) with an additional helping of memoisation.<br />
** some kind of coding / pair programming? Maybe set aside one of the two days for this?<br />
<br />
Miscellaneous:<br />
* Please could everyone bring or make a nametag that identifies you by your real name and/or IRC name.</div>PaulJohnsonhttps://wiki.haskell.org/Phone_numberPhone number2006-04-24T20:05:01Z<p>PaulJohnson: Line counts and commentary.</p>
<hr />
<div>== Original Program ==<br />
<br />
By Paul Johnson<br />
<br />
This program was written after I read "An Empirical Comparison of Seven Programming Languages" at http://www.cis.udel.edu/~silber/470STUFF/article.pdf.<br />
<br />
To run this program, copy and paste each code block into a file with the appropriate name (so module Main goes into Main.hs) and compile. Depending on your OS you may need to modify the dictionary file name. You may also have to run it with "+RTS -k16000000" on the command line in order to increase the stack space. It depends on your dictionary.<br />
<br />
First, the PhoneWord module. This contains the meat of the program.<br />
<br />
<haskell> <br />
module PhoneWord where<br />
<br />
import Data.Array<br />
import Data.Char<br />
import Data.List<br />
<br />
<br />
-- The number encoding, as specified in the problem statement.<br />
numberPairs :: [(Int, String)]<br />
numberPairs = [(0, "e"), (1, "jnq"), (2, "rwx"), (3, "dsy"), (4, "ft"),<br />
(5, "am"), (6, "civ"), (7, "bku"), (8, "lop"), (9, "ghz")]<br />
<br />
<br />
-- Encode a character by looking it up in the inverse of the numberPairs<br />
-- table. Creating the inverse takes three lines of code (including the<br />
-- 'where'), but we can live with that. The alternative would be to invert<br />
-- the list manually and then have a longer list of pairs above.<br />
encode :: Char -> Int<br />
encode c = codeTable ! (toLower c)<br />
where<br />
codeTable = array ('a', 'z') $ concatMap pairList numberPairs<br />
pairList (n, cs) = map (\c -> (c, n)) cs<br />
<br />
-- The dictionary is stored in a denary tree. A node has sub-trees, a leaf<br />
-- does not. At each node or leaf is the list of strings that encode to the<br />
-- number of that location.<br />
data DenaryTree =<br />
Node {strings :: [String], subTrees :: Array Int DenaryTree} |<br />
Leaf {strings :: [String]}<br />
deriving (Eq, Show)<br />
<br />
-- Empty and unit trees.<br />
emptyTree :: DenaryTree<br />
emptyTree = Leaf []<br />
<br />
unitTree :: String -> DenaryTree<br />
unitTree str = Leaf [str]<br />
<br />
<br />
-- Given an existing tree, create a new tree to be its parent. Put the<br />
-- existing tree at position 'n' in the new parent and put 'strs' in it.<br />
newNode :: [String] -> Int -> DenaryTree -> DenaryTree<br />
newNode strs n subtree = Node strs $ array (0,9) $<br />
(n, subtree) : [(i, emptyTree) | i <- [0..9], i /= n]<br />
<br />
<br />
-- Add a new word to a tree, returning a new tree.<br />
addWord :: String -> DenaryTree -> DenaryTree<br />
<br />
-- The worker function is addWord1. addWord just wraps it up<br />
-- in a more convenient form.<br />
addWord newString tree = addWord1 numbers tree<br />
where<br />
numbers = map encode newString<br />
addWord1 [] (Leaf oldStrs) = Leaf (newString : oldStrs)<br />
addWord1 [] (Node oldStrs arr) = Node (newString : oldStrs) arr<br />
addWord1 (n:ns) (Leaf oldStrs) = newNode oldStrs n $ newBranch ns<br />
addWord1 (n:ns) (Node oldStrs arr) =<br />
Node oldStrs $ arr // [(n, addWord1 ns $ arr ! n)]<br />
newBranch [] = unitTree newString<br />
newBranch (n:ns) = newNode [] n $ newBranch ns<br />
<br />
<br />
-- Convert a list of words into a NumberTree<br />
wordTree :: [String] -> DenaryTree<br />
wordTree = foldr addWord emptyTree<br />
<br />
<br />
-- Find the list of words which match a prefix of the number by descending<br />
-- the tree until you either run out of tree or digits, and accumulating<br />
-- the words as you go.<br />
findNumber :: DenaryTree -> String -> [String]<br />
<br />
findNumber tree [] = strings tree<br />
<br />
findNumber (Node strs arr) (c:cs) =<br />
strs ++ findNumber (arr ! (digitToInt c)) cs<br />
<br />
findNumber (Leaf strs) _ = strs<br />
<br />
<br />
-- Find the list of solutions for a number. This is rendered slightly<br />
-- messy by the fact that one digit can be inserted if no other progress<br />
-- is possible. So if "Foo Bar" is a legal solution then "Foo 7 Ar" is not.<br />
mnemonics :: DenaryTree -> String -> [String]<br />
mnemonics tree numbers = map tail $ mnemonics1 True numbers<br />
where<br />
mnemonics1 _ "" = return " "<br />
mnemonics1 digitOK numbers =<br />
case findNumber tree numbers of<br />
[] -><br />
if digitOK then do<br />
nextBit <- mnemonics1 False (tail numbers)<br />
return $ ' ' : head numbers : nextBit<br />
else<br />
[]<br />
ls -> do<br />
item <- ls<br />
nextBit <- mnemonics1 True $ drop (length item) numbers<br />
return $ ' ' : item ++ nextBit<br />
</haskell><br />
<br />
Now the Main module with the IO in it:<br />
<br />
<haskell><br />
module Main where<br />
<br />
import Data.Char<br />
import System.Environment<br />
import System.IO<br />
<br />
import PhoneWord<br />
<br />
<br />
-- File containing the words. This is the standard Unix dictionary.<br />
dictFile = "/usr/share/dict/words"<br />
<br />
-- Read the words file. Return only those "words" that consist entirely<br />
-- of letters and are at least three letters long.<br />
dictWords :: IO [String]<br />
dictWords =<br />
do<br />
text <- readFile dictFile<br />
return $ filter allowed $ lines text<br />
where<br />
allowed wrd =<br />
(and . (map isAlpha)) wrd &&<br />
length wrd >= 4<br />
<br />
-- Read the numbers file.<br />
numbers :: String -> IO [String]<br />
numbers fileName = do<br />
text <- readFile fileName<br />
return $ map (filter isDigit) $ lines text<br />
<br />
<br />
-- The Main Function executed when the program runs.<br />
main :: IO ()<br />
main =<br />
do<br />
args <- getArgs<br />
nums <- numbers $ head args<br />
dict <- dictWords<br />
let<br />
tree = wordTree dict<br />
results = map (\n -> (n, mnemonics tree n)) nums<br />
sequence_ $ concatMap printResult results<br />
where<br />
printResult (num, strings) =<br />
map (\str -> putStrLn $ num ++ ": " ++ str) strings<br />
</haskell><br />
<br />
Finally, a little module to generate a random test file:<br />
<br />
<haskell><br />
module MakeTest where<br />
<br />
import System.Random<br />
import Test.QuickCheck<br />
<br />
alphabet = ['0'..'9']<br />
<br />
number :: Gen String<br />
number = do<br />
len <- elements [0..10]<br />
sequence $ replicate len $ elements alphabet<br />
<br />
numbers :: Gen [String]<br />
numbers = sequence $ replicate 1000 number<br />
<br />
makeTest :: IO ()<br />
makeTest = do<br />
rnd <- getStdGen<br />
writeFile "testData" $ unlines $ generate 1 rnd numbers<br />
</haskell><br />
<br />
== Shorter solution ==<br />
<br />
By John Hamilton.<br />
<br />
I heard about this problem from Peter Norvig's page [http://www.norvig.com/java-lisp.html Lisp as an Alternative to Java]. (You should also check out http://www.flownet.com/ron/papers/lisp-java/ for more info.) I've been learning Haskell, and to see how it would compare with Lisp, I recently wrote the following program.<br />
<br />
<haskell><br />
import Data.Char<br />
import Data.List<br />
import Data.Map (fromListWith, findWithDefault)<br />
import System.Environment<br />
<br />
encodeWord = map f . filter (/= '"') where<br />
f x = head $ [d | (s, d) <- ps, (toLower x) `elem` s]<br />
ps = zip ["e", "jnq", "rwx", "dsy", "ft", "am", "civ", "bku", "lop", "ghz"]<br />
['0'..'9']<br />
<br />
translate wordMap _ "" = [""]<br />
translate wordMap digit xs@(x:xs') =<br />
if all null ys && digit<br />
then combine [[x]] (translate wordMap False xs')<br />
else concat $ zipWith combine ys zs<br />
where<br />
ys = [findWithDefault [] s wordMap | s <- (tail . inits) xs]<br />
zs = [translate wordMap True s | s <- tails xs']<br />
combine [] _ = []<br />
combine ys [""] = ys<br />
combine ys zs = [y ++ " " ++ z | y <- ys, z <- zs]<br />
<br />
process wordMap n = [n ++ ": " ++ x | x <- xs] where<br />
xs = translate wordMap True $ filter (`notElem` "-/") n<br />
<br />
main = do<br />
[dictionary, input] <- getArgs<br />
words <- readFile dictionary<br />
let wordMap = fromListWith (++) [(encodeWord w, [w]) | w <- lines words]<br />
numbers <- readFile input<br />
mapM_ putStrLn $ lines numbers >>= process wordMap<br />
</haskell><br />
<br />
----<br />
<br />
27 lines of code. Nice work. You have handily beaten both Common Lisp and Scheme.<br />
<br />
I took 88 lines, of which 22 implemented a denary tree rather than using Data.Map. It's some time since I wrote the program, and I can't remember now why I did this. Some of the other 66 were module declarations and repeated imports (for two modules), and type declarations for all top-level functions. Finally there was the fact that I was using /usr/dict/words because I didn't have the original data set, and this required a certain amount of extra filtering. But even allowing for all that I think your solution is indeed shorter. [[User:PaulJohnson|PaulJohnson]] 20:05, 24 April 2006 (UTC)</div>PaulJohnsonhttps://wiki.haskell.org/Phone_numberPhone number2006-04-24T18:49:49Z<p>PaulJohnson: Added my name to my program, and bracketed code with haskell tags.</p>
<hr />
<div>== Original Program ==<br />
<br />
By Paul Johnson<br />
<br />
This program was written after I read "An Empirical Comparison of Seven Programming Languages" at http://www.cis.udel.edu/~silber/470STUFF/article.pdf.<br />
<br />
To run this program, copy and paste each code block into a file with the appropriate name (so module Main goes into Main.hs) and compile. Depending on your OS you may need to modify the dictionary file name. You may also have to run it with "+RTS -k16000000" on the command line in order to increase the stack space. It depends on your dictionary.<br />
<br />
First, the PhoneWord module. This contains the meat of the program.<br />
<br />
<haskell> <br />
module PhoneWord where<br />
<br />
import Data.Array<br />
import Data.Char<br />
import Data.List<br />
<br />
<br />
-- The number encoding, as specified in the problem statement.<br />
numberPairs :: [(Int, String)]<br />
numberPairs = [(0, "e"), (1, "jnq"), (2, "rwx"), (3, "dsy"), (4, "ft"),<br />
(5, "am"), (6, "civ"), (7, "bku"), (8, "lop"), (9, "ghz")]<br />
<br />
<br />
-- Encode a character by looking it up in the inverse of the numberPairs<br />
-- table. Creating the inverse takes three lines of code (including the<br />
-- 'where'), but we can live with that. The alternative would be to invert<br />
-- the list manually and then have a longer list of pairs above.<br />
encode :: Char -> Int<br />
encode c = codeTable ! (toLower c)<br />
where<br />
codeTable = array ('a', 'z') $ concatMap pairList numberPairs<br />
pairList (n, cs) = map (\c -> (c, n)) cs<br />
<br />
-- The dictionary is stored in a denary tree. A node has sub-trees, a leaf<br />
-- does not. At each node or leaf is the list of strings that encode to the<br />
-- number of that location.<br />
data DenaryTree =<br />
Node {strings :: [String], subTrees :: Array Int DenaryTree} |<br />
Leaf {strings :: [String]}<br />
deriving (Eq, Show)<br />
<br />
-- Empty and unit trees.<br />
emptyTree :: DenaryTree<br />
emptyTree = Leaf []<br />
<br />
unitTree :: String -> DenaryTree<br />
unitTree str = Leaf [str]<br />
<br />
<br />
-- Given an existing tree, create a new tree to be its parent. Put the<br />
-- existing tree at position 'n' in the new parent and put 'strs' in it.<br />
newNode :: [String] -> Int -> DenaryTree -> DenaryTree<br />
newNode strs n subtree = Node strs $ array (0,9) $<br />
(n, subtree) : [(i, emptyTree) | i <- [0..9], i /= n]<br />
<br />
<br />
-- Add a new word to a tree, returning a new tree.<br />
addWord :: String -> DenaryTree -> DenaryTree<br />
<br />
-- The worker function is addWord1. addWord just wraps it up<br />
-- in a more convenient form.<br />
addWord newString tree = addWord1 numbers tree<br />
where<br />
numbers = map encode newString<br />
addWord1 [] (Leaf oldStrs) = Leaf (newString : oldStrs)<br />
addWord1 [] (Node oldStrs arr) = Node (newString : oldStrs) arr<br />
addWord1 (n:ns) (Leaf oldStrs) = newNode oldStrs n $ newBranch ns<br />
addWord1 (n:ns) (Node oldStrs arr) =<br />
Node oldStrs $ arr // [(n, addWord1 ns $ arr ! n)]<br />
newBranch [] = unitTree newString<br />
newBranch (n:ns) = newNode [] n $ newBranch ns<br />
<br />
<br />
-- Convert a list of words into a NumberTree<br />
wordTree :: [String] -> DenaryTree<br />
wordTree = foldr addWord emptyTree<br />
<br />
<br />
-- Find the list of words which match a prefix of the number by descending<br />
-- the tree until you either run out of tree or digits, and accumulating<br />
-- the words as you go.<br />
findNumber :: DenaryTree -> String -> [String]<br />
<br />
findNumber tree [] = strings tree<br />
<br />
findNumber (Node strs arr) (c:cs) =<br />
strs ++ findNumber (arr ! (digitToInt c)) cs<br />
<br />
findNumber (Leaf strs) _ = strs<br />
<br />
<br />
-- Find the list of solutions for a number. This is rendered slightly<br />
-- messy by the fact that one digit can be inserted if no other progress<br />
-- is possible. So if "Foo Bar" is a legal solution then "Foo 7 Ar" is not.<br />
mnemonics :: DenaryTree -> String -> [String]<br />
mnemonics tree numbers = map tail $ mnemonics1 True numbers<br />
where<br />
mnemonics1 _ "" = return " "<br />
mnemonics1 digitOK numbers =<br />
case findNumber tree numbers of<br />
[] -><br />
if digitOK then do<br />
nextBit <- mnemonics1 False (tail numbers)<br />
return $ ' ' : head numbers : nextBit<br />
else<br />
[]<br />
ls -> do<br />
item <- ls<br />
nextBit <- mnemonics1 True $ drop (length item) numbers<br />
return $ ' ' : item ++ nextBit<br />
</haskell><br />
<br />
Now the Main module with the IO in it:<br />
<br />
<haskell><br />
module Main where<br />
<br />
import Data.Char<br />
import System.Environment<br />
import System.IO<br />
<br />
import PhoneWord<br />
<br />
<br />
-- File containing the words. This is the standard Unix dictionary.<br />
dictFile = "/usr/share/dict/words"<br />
<br />
-- Read the words file. Return only those "words" that consist entirely<br />
-- of letters and are at least three letters long.<br />
dictWords :: IO [String]<br />
dictWords =<br />
do<br />
text <- readFile dictFile<br />
return $ filter allowed $ lines text<br />
where<br />
allowed wrd =<br />
(and . (map isAlpha)) wrd &&<br />
length wrd >= 4<br />
<br />
-- Read the numbers file.<br />
numbers :: String -> IO [String]<br />
numbers fileName = do<br />
text <- readFile fileName<br />
return $ map (filter isDigit) $ lines text<br />
<br />
<br />
-- The Main Function executed when the program runs.<br />
main :: IO ()<br />
main =<br />
do<br />
args <- getArgs<br />
nums <- numbers $ head args<br />
dict <- dictWords<br />
let<br />
tree = wordTree dict<br />
results = map (\n -> (n, mnemonics tree n)) nums<br />
sequence_ $ concatMap printResult results<br />
where<br />
printResult (num, strings) =<br />
map (\str -> putStrLn $ num ++ ": " ++ str) strings<br />
</haskell><br />
<br />
Finally, a little module to generate a random test file:<br />
<br />
<haskell><br />
module MakeTest where<br />
<br />
import System.Random<br />
import Test.QuickCheck<br />
<br />
alphabet = ['0'..'9']<br />
<br />
number :: Gen String<br />
number = do<br />
len <- elements [0..10]<br />
sequence $ replicate len $ elements alphabet<br />
<br />
numbers :: Gen [String]<br />
numbers = sequence $ replicate 1000 number<br />
<br />
makeTest :: IO ()<br />
makeTest = do<br />
rnd <- getStdGen<br />
writeFile "testData" $ unlines $ generate 1 rnd numbers<br />
</haskell><br />
<br />
== Shorter solution ==<br />
<br />
By John Hamilton.<br />
<br />
I heard about this problem from Peter Norvig's page [http://www.norvig.com/java-lisp.html Lisp as an Alternative to Java]. (You should also check out http://www.flownet.com/ron/papers/lisp-java/ for more info.) I've been learning Haskell, and to see how it would compare with Lisp, I recently wrote the following program.<br />
<br />
<haskell><br />
import Data.Char<br />
import Data.List<br />
import Data.Map (fromListWith, findWithDefault)<br />
import System.Environment<br />
<br />
encodeWord = map f . filter (/= '"') where<br />
f x = head $ [d | (s, d) <- ps, (toLower x) `elem` s]<br />
ps = zip ["e", "jnq", "rwx", "dsy", "ft", "am", "civ", "bku", "lop", "ghz"]<br />
['0'..'9']<br />
<br />
translate wordMap _ "" = [""]<br />
translate wordMap digit xs@(x:xs') =<br />
if all null ys && digit<br />
then combine [[x]] (translate wordMap False xs')<br />
else concat $ zipWith combine ys zs<br />
where<br />
ys = [findWithDefault [] s wordMap | s <- (tail . inits) xs]<br />
zs = [translate wordMap True s | s <- tails xs']<br />
combine [] _ = []<br />
combine ys [""] = ys<br />
combine ys zs = [y ++ " " ++ z | y <- ys, z <- zs]<br />
<br />
process wordMap n = [n ++ ": " ++ x | x <- xs] where<br />
xs = translate wordMap True $ filter (`notElem` "-/") n<br />
<br />
main = do<br />
[dictionary, input] <- getArgs<br />
words <- readFile dictionary<br />
let wordMap = fromListWith (++) [(encodeWord w, [w]) | w <- lines words]<br />
numbers <- readFile input<br />
mapM_ putStrLn $ lines numbers >>= process wordMap<br />
</haskell></div>PaulJohnsonhttps://wiki.haskell.org/Prelude_extensionsPrelude extensions2006-04-23T12:38:45Z<p>PaulJohnson: </p>
<hr />
<div><br />
<br />
== Sorted lists ==<br />
<br />
The following are versions of standard prelude functions, but intended for sorted lists. The advantage is that they frequently reduce execution time by an O(n). The disadvantage is that the elements have to be members of Ord, and the lists have to be already sorted.<br />
<br />
-- Eliminates duplicate entries from the list, where duplication is defined<br />
-- by the 'eq' function. The last value is kept.<br />
sortedNubBy :: (a -> a -> Bool) -> [a] -> [a]<br />
sortedNubBy eq (x1 : xs@(x2 : _)) =<br />
if eq x1 x2 then sortedNubBy eq xs else x1 : sortedNubBy eq xs<br />
sortedNubBy _ xs = xs<br />
<br />
sortedNub :: (Eq a) => [a] -> [a]<br />
sortedNub = sortedNubBy (==)<br />
<br />
-- Merge two sorted lists into a new sorted list. Where elements are equal<br />
-- the element from the first list is taken first.<br />
mergeBy :: (a -> a -> Ordering) -> [a] -> [a] -> [a]<br />
mergeBy cmp xs@(x1:xs1) ys@(y1:ys1) =<br />
if cmp x1 y1 == GT<br />
then y1 : mergeBy cmp xs ys1<br />
else x1 : mergeBy cmp xs1 ys<br />
mergeBy _ [] ys = ys<br />
mergeBy _ xs [] = xs<br />
<br />
merge :: (Ord a) => [a] -> [a] -> [a]<br />
merge = mergeBy compare</div>PaulJohnsonhttps://wiki.haskell.org/Example_codeExample code2006-04-23T11:56:36Z<p>PaulJohnson: Added prelude extensions</p>
<hr />
<div>== Example Code ==<br />
<br />
This is a collection of example code. It is intended to take the role of the old Wiki area [http://haskell.org/hawiki/CodeOnTheWiki CodeOnTheWiki]. Contributors of code to the old area are encouraged to bring their code over here. This should only be done by the original author because anything on these pages is automatically licensed under the Simple Permissive License ([[Copyrights]]).<br />
<br />
[[Prelude Extensions]]: Simple things you've always wished were in the Prelude.<br />
<br />
[[Gallery]]: Complete small programs.</div>PaulJohnsonhttps://wiki.haskell.org/Phone_numberPhone number2006-04-23T11:45:47Z<p>PaulJohnson: </p>
<hr />
<div>This program was written after I read "An Empirical Comparison of Seven Programming Languages" at http://www.cis.udel.edu/~silber/470STUFF/article.pdf.<br />
<br />
To run this program, copy and paste each code block into a file with the appropriate name (so module Main goes into Main.hs) and compile. Depending on your OS you may need to modify the dictionary file name. You may also have to run it with "+RTS -k16000000" on the command line in order to increase the stack space. It depends on your dictionary.<br />
<br />
First, the PhoneWord module. This contains the meat of the program.<br />
<br />
module PhoneWord where<br />
<br />
import Data.Array<br />
import Data.Char<br />
import Data.List<br />
<br />
<br />
-- The number encoding, as specified in the problem statement.<br />
numberPairs :: [(Int, String)]<br />
numberPairs = [(0, "e"), (1, "jnq"), (2, "rwx"), (3, "dsy"), (4, "ft"),<br />
(5, "am"), (6, "civ"), (7, "bku"), (8, "lop"), (9, "ghz")]<br />
<br />
<br />
-- Encode a character by looking it up in the inverse of the numberPairs<br />
-- table. Creating the inverse takes three lines of code (including the<br />
-- 'where'), but we can live with that. The alternative would be to invert<br />
-- the list manually and then have a longer list of pairs above.<br />
encode :: Char -> Int<br />
encode c = codeTable ! (toLower c)<br />
where<br />
codeTable = array ('a', 'z') $ concatMap pairList numberPairs<br />
pairList (n, cs) = map (\c -> (c, n)) cs<br />
<br />
-- The dictionary is stored in a denary tree. A node has sub-trees, a leaf<br />
-- does not. At each node or leaf is the list of strings that encode to the<br />
-- number of that location.<br />
data DenaryTree =<br />
Node {strings :: [String], subTrees :: Array Int DenaryTree} |<br />
Leaf {strings :: [String]}<br />
deriving (Eq, Show)<br />
<br />
-- Empty and unit trees.<br />
emptyTree :: DenaryTree<br />
emptyTree = Leaf []<br />
<br />
unitTree :: String -> DenaryTree<br />
unitTree str = Leaf [str]<br />
<br />
<br />
-- Given an existing tree, create a new tree to be its parent. Put the<br />
-- existing tree at position 'n' in the new parent and put 'strs' in it.<br />
newNode :: [String] -> Int -> DenaryTree -> DenaryTree<br />
newNode strs n subtree = Node strs $ array (0,9) $<br />
(n, subtree) : [(i, emptyTree) | i <- [0..9], i /= n]<br />
<br />
<br />
-- Add a new word to a tree, returning a new tree.<br />
addWord :: String -> DenaryTree -> DenaryTree<br />
<br />
-- The worker function is addWord1. addWord just wraps it up<br />
-- in a more convenient form.<br />
addWord newString tree = addWord1 numbers tree<br />
where<br />
numbers = map encode newString<br />
addWord1 [] (Leaf oldStrs) = Leaf (newString : oldStrs)<br />
addWord1 [] (Node oldStrs arr) = Node (newString : oldStrs) arr<br />
addWord1 (n:ns) (Leaf oldStrs) = newNode oldStrs n $ newBranch ns<br />
addWord1 (n:ns) (Node oldStrs arr) =<br />
Node oldStrs $ arr // [(n, addWord1 ns $ arr ! n)]<br />
newBranch [] = unitTree newString<br />
newBranch (n:ns) = newNode [] n $ newBranch ns<br />
<br />
<br />
-- Convert a list of words into a NumberTree<br />
wordTree :: [String] -> DenaryTree<br />
wordTree = foldr addWord emptyTree<br />
<br />
<br />
-- Find the list of words which match a prefix of the number by descending<br />
-- the tree until you either run out of tree or digits, and accumulating<br />
-- the words as you go.<br />
findNumber :: DenaryTree -> String -> [String]<br />
<br />
findNumber tree [] = strings tree<br />
<br />
findNumber (Node strs arr) (c:cs) =<br />
strs ++ findNumber (arr ! (digitToInt c)) cs<br />
<br />
findNumber (Leaf strs) _ = strs<br />
<br />
<br />
-- Find the list of solutions for a number. This is rendered slightly<br />
-- messy by the fact that one digit can be inserted if no other progress<br />
-- is possible. So if "Foo Bar" is a legal solution then "Foo 7 Ar" is not.<br />
mnemonics :: DenaryTree -> String -> [String]<br />
mnemonics tree numbers = map tail $ mnemonics1 True numbers<br />
where<br />
mnemonics1 _ "" = return " "<br />
mnemonics1 digitOK numbers =<br />
case findNumber tree numbers of<br />
[] -><br />
if digitOK then do<br />
nextBit <- mnemonics1 False (tail numbers)<br />
return $ ' ' : head numbers : nextBit<br />
else<br />
[]<br />
ls -> do<br />
item <- ls<br />
nextBit <- mnemonics1 True $ drop (length item) numbers<br />
return $ ' ' : item ++ nextBit<br />
<br />
Now the Main module with the IO in it:<br />
<br />
module Main where<br />
<br />
import Data.Char<br />
import System.Environment<br />
import System.IO<br />
<br />
import PhoneWord<br />
<br />
<br />
-- File containing the words. This is the standard Unix dictionary.<br />
dictFile = "/usr/share/dict/words"<br />
<br />
-- Read the words file. Return only those "words" that consist entirely<br />
-- of letters and are at least three letters long.<br />
dictWords :: IO [String]<br />
dictWords =<br />
do<br />
text <- readFile dictFile<br />
return $ filter allowed $ lines text<br />
where<br />
allowed wrd =<br />
(and . (map isAlpha)) wrd &&<br />
length wrd >= 4<br />
<br />
-- Read the numbers file.<br />
numbers :: String -> IO [String]<br />
numbers fileName = do<br />
text <- readFile fileName<br />
return $ map (filter isDigit) $ lines text<br />
<br />
<br />
-- The Main Function executed when the program runs.<br />
main :: IO ()<br />
main =<br />
do<br />
args <- getArgs<br />
nums <- numbers $ head args<br />
dict <- dictWords<br />
let<br />
tree = wordTree dict<br />
results = map (\n -> (n, mnemonics tree n)) nums<br />
sequence_ $ concatMap printResult results<br />
where<br />
printResult (num, strings) =<br />
map (\str -> putStrLn $ num ++ ": " ++ str) strings<br />
<br />
Finally, a little module to generate a random test file:<br />
<br />
module MakeTest where<br />
<br />
import System.Random<br />
import Test.QuickCheck<br />
<br />
alphabet = ['0'..'9']<br />
<br />
number :: Gen String<br />
number = do<br />
len <- elements [0..10]<br />
sequence $ replicate len $ elements alphabet<br />
<br />
numbers :: Gen [String]<br />
numbers = sequence $ replicate 1000 number<br />
<br />
makeTest :: IO ()<br />
makeTest = do<br />
rnd <- getStdGen<br />
writeFile "testData" $ unlines $ generate 1 rnd numbers</div>PaulJohnsonhttps://wiki.haskell.org/GalleryGallery2006-04-23T11:37:24Z<p>PaulJohnson: </p>
<hr />
<div>The Gallery is a repository of small programs. Each one should compile to a complete executable that does something, but also illustrates what a Haskell program actually looks like. Good Gallery examples should be well commented with a view to helping new programmers understand what is going on.<br />
<br />
* [[Phone Number]]: Generates mnemonics for phone numbers. Actually written as a benchmark.</div>PaulJohnsonhttps://wiki.haskell.org/GalleryGallery2006-04-23T11:36:54Z<p>PaulJohnson: </p>
<hr />
<div>== The Gallery ==<br />
<br />
The Gallery is a repository of small programs. Each one should compile to a complete executable that does something, but also illustrates what a Haskell program actually looks like. Good Gallery examples should be well commented with a view to helping new programmers understand what is going on.<br />
<br />
* [[Phone Number]]: Generates mnemonics for phone numbers. Actually written as a benchmark.</div>PaulJohnsonhttps://wiki.haskell.org/Example_codeExample code2006-04-23T10:30:47Z<p>PaulJohnson: </p>
<hr />
<div><br />
== Example Code ==<br />
<br />
This is a collection of example code. It is intended to take the role of the old Wiki area [http://haskell.org/hawiki/CodeOnTheWiki CodeOnTheWiki]. Contributors of code to the old area are encouraged to bring their code over here. This should only be done by the original author because anything on these pages is automatically licensed under the Simple Permissive License ([[Copyrights]]).<br />
<br />
[[Gallery]]: Complete small programs.</div>PaulJohnsonhttps://wiki.haskell.org/HaskellHaskell2006-04-23T10:24:51Z<p>PaulJohnson: Added example code page</p>
<hr />
<div>[[Image:Haskelllogo-small.jpg|center|Haskell - A purely functional language]]<br />
<br />
<center><br />
Haskell is a general purpose, purely functional programming language. Haskell compilers are freely available for almost any computer.<br />
</center><br />
__NOTOC__<br />
<center><br />
{| border=0 cellspacing=5 cellpadding=15<br />
| valign=top bgcolor=#F0F0F0 style="text-align:left" |<br />
== About ==<br />
<br />
* [[Introduction]]<br />
* [[Language and library specification|Language specification]]<br />
* [[Haskell in practice]]<br />
* [[Haskell in education]]<br />
* [http://www.haskell.org/haskell-history.html History]<br />
* [[Future]]<br />
* [[Implementations]]<br />
<br />
== Learning ==<br />
<br />
* [[Learning|Getting started]]<br />
* [[ExampleCode|Example Code]]<br />
* [[Books and tutorials]]<br />
* [[Research papers|Research]]<br />
<br />
== Documentation ==<br />
<br />
* [http://haskell.org/ghc/docs/latest/html/libraries/ Standard libraries]<br />
* [[Libraries and tools]]<br />
* [http://haskell.org/hoogle Hoogle] - library search<br />
* [[Special:Categories|Wiki articles]] <br />
* [http://haskell.org/hawiki/ Old wiki articles]<br />
<br />
== Community ==<br />
<br />
* [[Mailing lists]]<br />
* [http://haskell.org/communities/ Communities and projects]<br />
* [[Haskell Weekly News|Weekly news]]<br />
* [[IRC channel|Internet Relay Chat (IRC)]]<br />
* [http://planet.haskell.org/ Planet Haskell (blogs)]<br />
* [[Links|Haskell people]]<br />
* [[Jobs]]<br />
* [[Consultants]]<br />
* [[Humor]]<br />
* [[Merchandise]]<br />
* [[HaskellWiki:Contributing|Contributing]]<br />
<br />
|valign=top bgcolor=#F0F0F0 width=65% style="text-align:left"|<br />
<br />
== Events ==<br />
{{:Events}}<br />
<br />
== News ==<br />
<br />
* The [http://hackage.haskell.org/trac/haskell-prime Haskell-prime] committee has started work on defining the next minor revision of the language specification.<br />
<br />
* ''"Haskell is the programming tool of choice for discriminating hackers"'' for the second year running!<br />The teams winning first and third place in the [http://icfpc.plt-scheme.org/ ICFP 2005 programming contest] both used Haskell.<br />
<br />
{{:News}}<br />
<br />
|}<br />
</center></div>PaulJohnsonhttps://wiki.haskell.org/BooksBooks2006-02-17T19:47:59Z<p>PaulJohnson: Added pointer to video lectures</p>
<hr />
<div>=Language Definition=<br />
<br />
<DL><br />
<DT>Simon Peyton Jones: [http://titles.cambridge.org/catalogue.asp?isbn=0521826144 <EM>Haskell 98 Language and Libraries</EM>], Cambridge University Press, 2003, Hardback, 272 pages, ISBN: 0521826144, £35.00<br />
<BR><br />
<BLOCKQUOTE><br />
<B>Book Description</B><BR> <br />
Haskell is the world's leading lazy functional programming language,<br />
widely used for teaching, research, and applications. The language<br />
continues to develop rapidly, but in 1998 the community decided to<br />
capture a stable snapshot of the language: Haskell 98. All Haskell<br />
compilers support Haskell 98, so practitioners and educators alike<br />
have a stable base for their work. This book constitutes the agreed<br />
definition of the Haskell 98, both the language itself and its<br />
supporting libraries. It has been considerably revised and refined<br />
since the original definition, and appears in print for the first<br />
time. It should be a standard reference work for anyone involved in<br />
research, teaching, or application of Haskell.<br />
</BLOCKQUOTE> <br />
</DT><br />
</DL><br />
<br />
= Textbooks=<br />
<br />
<DL><br />
<DT>Paul Hudak: [http://www.haskell.org/soe <EM>The Haskell School of Expression: Learning Functional Programming through Multimedia</EM>], Cambridge University Press, New York, 2000, 416<br />
pp, 15 line diagrams, 75 exercises, Paperback $29.95, ISBN:<br />
0521644089, Hardback $74.95, ISBN: 0521643384<br />
<blockquote><br />
<B>Book Description</B><BR> <br />
This book teaches functional programming as a way of thinking and<br />
problem solving, using Haskell, the most popular purely functional<br />
language. Rather than using the conventional mathematical examples<br />
commonly found in other programming language textbooks, the author<br />
draws examples from multimedia applications, including graphics,<br />
animation, and computer music, thus rewarding the reader with working<br />
programs for inherently more interesting applications. Aimed at both<br />
beginning and advanced programmers, this tutorial begins with a gentle<br />
introduction to functional programming and moves rapidly on to more<br />
advanced topics. An underlying theme is the design and implementation<br />
of domain specific languages, using three examples: FAL (a Functional<br />
Animation Language), IRL (an Imperative Robot Language), and MDL (a<br />
Music Description Language). Details about programming in Haskell<br />
are presented in boxes throughout the text so they can be easily<br />
referred to and found quickly.<br />
<br />
The book's Web Site contains source files for all programs in the<br />
text, as well as the graphics libraries to run them under Windows and<br />
Linux platforms. It also contains PowerPoint slides useful for<br />
teaching a course using the textbook.<br />
</blockquote><br />
<DT>Simon Thompson: [http://www.cs.ukc.ac.uk/people/staff/sjt/craft2e/ <EM>Haskell: The Craft of Functional Programming</EM>], Second Edition,<br />
Addison-Wesley, 507&nbsp;pages, paperback, 1999. ISBN<br />
0-201-34275-8.<br />
<blockquote><br />
<B>Book Description</B><BR> <br />
The second edition of Haskell: The Craft of Functional Programming is essential reading for beginners to functional programming and newcomers to the Haskell programming language. The emphasis is on the process of crafting programs and the text contains many examples and running case studies, as well as advice an program design, testing, problem solving and how to avoid common pitfalls. <br />
<br />
Building on the strengths of the first edition, the book includes many new and improved features: <br />
*Complete coverage of Haskell 98, the standard version of Haskell which will be stable and supported by implementations for years to come. <br />
*An emphasis on software engineering principles, encouraging a disciplined approach to building reusable libraries of software components. <br />
*Detailed coverage of the Hugs interpreter with an appendix covering other implementations. <br />
*A running case study of pictures emphasizes the built-in functions which appear in the standard prelude and libraries. It is also used to give an early preview of some of the more complex language features, such as high-order functions. <br />
*List comprehensions and the standard functions over lists are covered before recursion. <br />
*Early coverage of polymorphism supporting the "toolkit" approach and encouraging the resuse of built-in functions and types. <br />
*Extensive reference material containing details of further reading in books, journals and on the World Wide Web. <br />
*Accompanying Web Site supporting the book, containing all the program code, further teaching materials and other useful resources. <br />
<B>Synopsis</B><BR> <br />
This books introduces Haskell at a level appropriate for those with little or no prior experience of functional programming. The emphasis is on the process of crafting programs, solving problems, and avoiding common errors.<br />
</blockquote><br />
<br />
<DT>Richard Bird: [http://www.prenhall.com/allbooks/ptr_0134843460.html <EM>Introduction to Functional Programming using Haskell</EM>], 2nd edition, Prentice Hall Press, 1998, 460 pp., ISBN: 0-13-484346-0.<br />
<blockquote><br />
From the cover:<br />
<br />
After the success of the first edition, Introduction to Functional Programming using Haskell has been thoroughly updated and revised to provide a complete grounding in the principles and techniques of programming with functions.<br />
<br />
The second edition uses the popular language Haskell to express functional programs. There are new chapters on program optimisation, abstract datatypes in a functional setting, and programming in a monadic style. There are completely new case studies, and many new exercises.<br />
<br />
As in the first edition, there is an emphasis on the fundamental techniques for reasoning about functional programs, and for deriving them systematically from their specifications.<br />
<br />
The book is self-contained, assuming no prior knowledge of programming, and is suitable as an introductory undergraduate text for first- or second-year students.<br />
</blockquote><br />
<br />
<DT>Antony Davie: [http://www.cup.org/Titles/25/0521258308.html <EM>An Introduction to Functional Programming Systems Using Haskell</EM>], Cambridge University Press, 1992. ISBN 0-521-25830-8 (hardback). ISBN 0-521-27724-8 (paperback).<br />
<blockquote><br />
Cover:<br />
<br />
Functional programming is a style of programming that has become increasingly popular during the past few years.<br />
Applicative programs have the advantage of being almost immediately expressible as functional descriptions; they can<br />
be proved correct and transformed through the referential transparency property.<br />
<br />
This book presents the basic concepts of functional programming, using the language Haskell for examples. The author<br />
incorporates a discussion of lambda calculus and its relationship with Haskell, exploring the implications for<br />
parallelism. Contents: SASL for Beginners / Examples of SASL Programming / More Advanced Applicative Programming<br />
Techniques / Lambda Calculus / The Relationship Between Lambda Calculus and SASL / Program Transformation and<br />
Efficiency / Correctness, Equivalence and Program Verification / Landin's SECD Machine and Related<br />
Implementations / Further Implementation Techniques / Special Purpose Hardware / The Applicative Style of<br />
Semantics / Other Applicative Languages / Implications for Parallelism / Functional Programming in Von Neumann<br />
Languages <br />
</blockquote><br />
<br />
<DT>Fethi Rabhi and Guy Lapalme: [http://www.iro.umontreal.ca/~lapalme/Algorithms-functional.html <EM> Algorithms: A functional programming approach</EM>], <br />
Addison-Wesley, 235&nbsp;pages, paperback, 1999. ISBN<br />
0-201-59604-0<BR><br />
<BLOCKQUOTE><br />
<B>Book Description</B><BR> <br />
The authors challenge more traditional methods of teaching algorithms<br />
by using a functional programming context, with Haskell as an<br />
implementation language. This leads to smaller, clearer and more<br />
elegant programs which enable the programmer to understand the<br />
algorithm more quickly and to use that understanding to explore<br />
alternative solutions. <br><br />
<b>Key features:</b><br />
*Most chapters are self-contained and can be taught independently from each other.<br />
*All programs are in Haskell'98 and provided on a WWW site.<br />
*End of chapter exercises throughout.<br />
*Comprehensive index and bibliographical notes.<br />
<B>Synopsis</B><BR> <br />
The book is organised as a classic algorithms book according to topics<br />
such as Abstract Data Types, sorting and searching. It uses a<br />
succession of practical programming examples to develop in the reader<br />
problem-solving skills which can be easily transferred to other<br />
language paradigms. It also introduces the idea of capturing<br />
algorithmic design strategies (e.g. Divide-and-Conquer, Dynamic<br />
Programming) through higher-order functions.<br><br />
<b>Target audience</b><br><br />
The book is intended for computer science students taking algorithms<br />
and/or (basic or advanced) functional programming courses.<br />
</BLOCKQUOTE><br />
<br />
<dt>Jeremy Gibbons and Oege de Moor (eds.): [http://www.palgrave.com/catalogue/catalogue.asp?Title_Id=0333992857 <em>The Fun of Programming</em>],Palgrave, 2002, 288 pages. ISBN 0333992857.<br />
<blockquote><br />
<b>Book description:</b><br><br />
In this textbook, leading researchers give tutorial expositions on the current state of the art of functional<br />
programming. The text is suitable for an undergraduate course immediately following an introduction to<br />
functional programming, and also for self-study. All new concepts are illustrated by plentiful examples,<br />
as well as exercises. A website gives access to accompanying software.<br />
</blockquote><br />
<br />
<dt> Cordelia Hall and John O'Donnell: [http://www.dcs.gla.ac.uk/~jtod/discrete-mathematics/ <em>Discrete Mathematics Using a Computer</em>],<br />
Springer, 2000, 360 pages. ISBN 1-85233-089-9.<br />
<blockquote><br />
<b>Book description:</b><br><br />
This book introduces the main topics of discrete mathematics with a strong emphasis on<br />
applications to computer science. It uses computer programs to implement and illustrate<br />
the mathematical ideas, helping the reader to gain a concrete understanding of the<br />
abstract mathematics. The programs are also useful for practical calculations, and they<br />
can serve as a foundation for larger software packages. <br />
<br />
Designed for first and second year undergraduate students, the book is also ideally suited<br />
to self-study. No prior knowledge of functional programming is required; the book and<br />
the online documentation provide everything you will need. <br />
</blockquote><br />
<br />
<dt>Kees Doets and Jan van Eijck: [http://www.cwi.nl/~jve/HR <em>The Haskell Road to Logic, Maths and Programming</em>]. King's College Publications, London, 2004. ISBN 0-9543006-9-6 (14.00 pounds, $25.00).<br />
<blockquote><br />
<b>Book description:</b><br><br />
The purpose of this book is to teach logic and mathematical reasoning<br />
in practice, and to connect logical reasoning with computer<br />
programming. Throughout the text, abstract concepts are linked to<br />
concrete representations in Haskell. Everything one has to know about<br />
programming in Haskell to understand the examples in the book is<br />
explained as we go along, but we do not cover every aspect of the<br />
language. Haskell is a marvelous demonstration tool for logic and<br />
maths because its functional character allows implementations to<br />
remain very close to the concepts that get implemented, while the<br />
laziness permits smooth handling of infinite data structures.<br />
<br />
We do not assume that our readers have previous experience with either<br />
programming or construction of formal proofs. We do assume previous<br />
acquaintance with mathematical notation, at the level of secondary<br />
school mathematics. Wherever necessary, we will recall relevant <br />
facts. Everything one needs to know about mathematical<br />
reasoning or programming is explained as we go along. We do assume<br />
that our readers are able to retrieve software from the Internet and<br />
install it, and that they know how to use an editor for constructing<br />
program texts.<br />
<br />
After having worked through the material in the book, i.e., after<br />
having digested the text and having carried out a substantial number<br />
of the exercises, the reader will be able to write interesting<br />
programs, reason about their correctness, and document them in a clear<br />
fashion. The reader will also have learned how to set up mathematical<br />
proofs in a structured way, and how to read and digest mathematical<br />
proofs written by others.<br />
<br />
The book can be used as a course textbook, but since it comes with<br />
solutions to all exercises (electronically available from the authors<br />
upon request) it is also well suited for private study. The source<br />
code of all programs discussed in the text, a list of errata, <br />
further relevant material and an email link to the authors<br />
can be found [http://www.cwi.nl/~jve/HR here].<br />
</blockquote><br />
<br />
<dt>Simon Peyton Jones: <em>Implementation of Functional Programming Language</em>,Prentice-Hall, 1987. ISBN 0134533259.<br />
<blockquote></blockquote><br />
<br />
<dt>Simon Peyton Jones, David Lester: <em>Implementing Functional Languages</em>, 1992.<br><br />
<blockquote><br />
The book is out of print. The full sources and a postscript version are <br />
[http://research.microsoft.com/Users/simonpj/Papers/papers.html available for free].<br />
</blockquote><br />
</DL><br />
<br />
=Papers available on the Web=<br />
<br />
==General Introductions to Haskell==<br />
<br />
<UL><br />
<LI>[http://www.haskell.org/tutorial/ <EM>A <br />
Gentle Introduction to Haskell</EM>] by Paul Hudak, John Peterson, and Joseph H. Fasel.<BR><br />
The title is a bit misleading. Some knowledge of another functional programming language is expected. The emphasis is on the type system and those features which are really new in Haskell (compared to other functional programming languages).<br />
<br />
<li>[http://www-106.ibm.com/developerworks/edu/os-dw-linuxhask-i.html Beginning Haskell] from IBM developerWorks<br><br />
This tutorial targets programmers of imperative languages wanting to learn about functional programming in the language Haskell. If you have programmed in languages such as C, Pascal, Fortran, C++, Java, Cobol, Ada, Perl, TCL, REXX, JavaScript, Visual Basic, or many others, you have been using an imperative paradigm. This tutorial provides a gentle introduction to the paradigm of functional programming, with specific illustrations in the Haskell 98 language. (Free registration required.)<br />
<br />
<li>Yet Another Haskell Tutorial by Hal Daume III et al. ([http://www.isi.edu/~hdaume/htut/tutorial.ps Postscript], [http://www.isi.edu/~hdaume/htut/tutorial.pdf Pdf])<br><br />
A tutorial for Haskell that is still under construction but covers already much ground.<br />
<br />
<LI>[http://www.numeric-quest.com/haskell/hcompanion/index.html Haskell Companion] by Jan Skibinski<BR><br />
A tutorial on most common concepts and definitions of functional language Haskell.<br />
<br />
<LI>[http://www.informatik.uni-bonn.de/~ralf/teaching/Hskurs_toc.html Online Haskell Course] by Ralf Hinze (in German).<br />
<br />
<LI>[functional-programming.dvi <EM>Functional Programming</EM><br />
by Jeroen Fokker, 1995.](153 pages, 600 KB)<BR><br />
Textbook for learning functional programming with Gofer. <br />
Here without Chapters&nbsp;6 and&nbsp;7. <br />
<br />
<LI>[http://www.cs.ou.edu/cs1323h/textbook/haskell.shtml <EM>Two Dozen Short Lessons in Haskell</EM> by Rex Page].<br />
A draft of a textbook on functional programming, available by ftp. <br />
It calls for active participation from readers by omitting<br />
material at certain points and asking the reader to attempt to fill in the missing <br />
information based on knowledge they have already acquired. The missing information is then <br />
supplied on the reverse side of the page. <br />
<br />
<LI>[haskeller.dvi <EM>The Little Haskeller</EM>] by Cordelia Hall and John Hughes, 9. November 1993, 26 pages.<BR><br />
An introduction using the Chalmers Haskell B interpreter (hbi).<br />
Attention: it relies very much on the user interface of hbi which is quite<br />
different for other Haskell systems.<br />
<br />
<LI>[http://www.di.uminho.pt/afp98/PAPERS/Tutorial.ps <EM>Haskell Tutorial</EM>]<br />
by José Barros and João Almeida.<br />
From a course given at the [http://www.di.uminho.pt/afp98/preprogram/html 3rd International Summer School on Advanced Functional Programming].<br />
<br />
<li>[http://www.cs.mu.oz.au/~bjpop/papers/mira2hask.ps.gz <em>Haskell for Miranda Programmers</em>] by Kevin Glynn and Bernie Pope.<br />
<br />
<li>[http://pleac.sourceforge.net/pleac_haskell/t1.html <em>PLEAC-Haskell</em>]<br><br />
Following the Perl Cookbook (by Tom Christiansen and Nathan Torkington, published by O'Reilly) spirit, the PLEAC Project aims to gather fans of programming, in order to implement the solutions in other programming languages.<br />
<br />
<li>[ftp://ftp.geoinfo.tuwien.ac.at/navratil/HaskellTutorial.pdf <em>Haskell-Tutorial</em>] by Damir Medak and Gerhard Navratil<br><br />
The fundamentals of functional languages for beginners.<br />
<LI>[http://www.reid-consulting-uk.ltd.uk/docs/ffi.html A Guide to Haskell's Foreign Function Interface] A guide to using the foreign function interface extension, using the rich set of functions in the Foreign libraries, design issues, and FFI preprocessors.<br />
<br />
<LI>[http://en.wikibooks.org/wiki/Programming:Haskell <em>Programming Haskell Wikibook</em>] is a communal effort by several authors to produce the definitive Haskell textbook. Its very much a work in progress at the moment, and contributions are welcome.<br />
<br />
<LI>[http://video.s-inf.de/#FP.2005-SS-Giesl.(COt).HD_Videoaufzeichnung <em>Video Lectures</em>] (in English) by Jürgen Giesl. About 30 hours in total, and great for learning Haskell. The lectures are 2005-SS-FP.V01 through 2005-SS-FP.V26.<br />
Videos 2005-SS-FP.U01 through 2005-SS-FP.U11 are exercise answer sessions, so you probably don't want those.<br />
<br />
</ul><br />
<br />
==References==<br />
<ul><br />
<li>[http://www.cs.uu.nl/~afie/haskell/tourofsyntax.html <em>Tour of the Haskell Syntax</em>] by Arjan van IJzendoorn.<br />
<li>[http://zvon.org/other/haskell/Outputglobal/index.html <em>Haskell Reference</em>] by Miloslav Nic.<br />
<li>[http://www.cs.uu.nl/~afie/haskell/tourofprelude.html <em>A Tour of the Haskell Prelude</em>] by Bernie Pope and Arjan van IJzendoorn.<br />
<li>[http://www.cse.unsw.edu.au/~paull/cs1011/inbuilt.html <em>Useful Haskell functions</em>]<br />
An explanation for beginners of many Haskell functions that are predefined in the Haskell Prelude.<br />
</ul><br />
<br />
<br />
== Motivation for Using Haskell ==<br />
<UL><br />
<LI>[http://www.md.chalmers.se/~rjmh/Papers/whyfp.html <EM>Why Functional Programming Matters</EM>] by [http://www.md.chalmers.se/~rjmh/ John Hughes], The Computer Journal, Vol. 32, No. 2, 1989, pp. 98 - 107. Also in: David A. Turner (ed.): Research Topics in Functional Programming, Addison-Wesley, 1990, pp. 17 - 42.<BR><br />
Exposes the advantages of functional programming languages.<br />
Demonstrates how higher-order functions and lazy evaluation enable new forms<br />
of modularization of programs.<br />
<br />
<LI><br />
[http://www.cs.ukc.ac.uk/pubs/1997/224/index.html <EM>Higher-order + Polymorphic = Reusable</EM>] by [http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson]. Unpublished, May 1997.<BR><br />
<STRONG>Abstract:</STRONG><br />
This paper explores how certain ideas in object oriented languages have their correspondents in functional languages. In particular we look at the analogue of the iterators of the C++ standard template library. We also give an example of the use of constructor classes which feature in Haskell 1.3 and Gofer.<br />
<br />
</UL><br />
<br />
==Analysis and Design Methods==<br />
<br />
<ul><br />
<li>[http://www.cs.ukc.ac.uk/pubs/2001/1152/index.html <em>FAD: A Functional Analysis and Design Methodology</em>] by Dan Russell.<br />
Phd thesis, Computing Laboratory, University of Kent at Canterbury, January 2001.<br><br />
<STRONG>Abstract:</STRONG><br />
This thesis presents the functional analysis and design methodology FAD. By functional we mean that it naturally supports<br />
software development within the functional programming paradigm (FP). <br />
<br />
Every popular methodology has a graphical modelling language which presents various pictorial representations of a<br />
system. FAD's modelling language provides the typical elements of functional programming, types and functions, plus<br />
elements to support modular development such as modules, subsystems and two forms of signature which specify an<br />
interface or a behavioural requirement. The language also includes relationships and associations between these<br />
elements, and provides simple representations of functional designs. The methodology has an integrated set of techniques<br />
which guide the development of an implementable solution from the deliverables of requirements engineering. FAD's data<br />
dictionary provides an organised repository for entities during and after development. <br />
<br />
The thesis thus provides a development medium which has hitherto been absent from the functional programming paradigm. <br />
</ul><br />
<br />
<br />
== Teaching Haskell == <br />
<UL><br />
<LI><br />
[http://www.cs.ukc.ac.uk/pubs/1997/208/index.html <EM>Where do I begin? A problem solving approach to teaching functional programming</EM>]<br />
by [http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson].<br />
In Krzysztof Apt, Pieter Hartel, and Paul Klint, editors, First International Conference on Declarative Programming Languages in Education. Springer-Verlag, September 1997.<br />
<BR><br />
<STRONG>Abstract:</STRONG><br />
This paper introduces a problem solving method for teaching functional programming, based on Polya's `How To Solve It', an introductory investigation of mathematical method. We first present the language independent version, and then show in particular how it applies to the development of programs in Haskell. The method is illustrated by a sequence of examples and a larger case study. <br />
<br />
<LI><br />
[http://www.cs.ukc.ac.uk/pubs/1995/214/index.html <EM>Functional programming through the curriculum</EM>] by<br />
[http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson]and Steve Hill.<br />
In Pieter H. Hartel and Rinus Plasmeijer, editors, Functional Programming<br />
Languages in Education, LNCS 1022, pages 85-102. Springer-Verlag, December 1995.<br />
<BR><br />
<STRONG>Abstract:</STRONG><br />
This paper discusses our experience in using a functional language in topics across the computer science curriculum. After examining the arguments for taking a functional approach, we look in detail at four case studies from different areas: programming language semantics, machine architectures, graphics and formal languages. <br />
</UL><br />
<br />
<br />
== Proving Program Correctness ==<br />
<br />
<UL><br />
<LI><br />
[http://www.cs.ukc.ac.uk/pubs/1992/123/index.html <EM>Formulating Haskell</EM>] by<br />
[http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson].<br />
Technical Report 29-92*, University of Kent, Computing Laboratory, University of Kent, Canterbury, UK, November 1992.<br />
<BR><br />
<STRONG>Abstract:</STRONG><br />
The functional programming language Haskell is examined from the point of view of proving programs correct. Particular features explored include the data type definition facilities, classes, the behaviour of patterns and guards and the monad approach to IO in the Glasgow Haskell compiler. <br />
</UL><br />
<br />
==Debugging Programs==<br />
<br />
<UL><br />
<LI>[http://www.cs.mu.oz.au/~bjpop/thesis.ps.gz <EM>Buddha: A Declarative Debugger for Haskell</EM>] by [http://www.cs.mu.oz.au/~bjpop/ Bernie Pope]. Honours Thesis.<br />
<li>[http://www-users.cs.york.ac.uk/~olaf/PUBLICATIONS/frejaHatHood.html <em>Freja, Hat and Hood - A Comparative Evaluation of Three Systems for Tracing and Debugging Lazy Functional Programs</em>] by Olaf Chitil, Colin Runciman and Malcolm Wallace.<br />
Proceedings of the 12th International Workshop on Implementation of Functional<br />
Languages, 2001.<br><br />
<STRONG>Abstract:</STRONG><br />
In this paper we compare three systems for tracing and debugging Haskell programs: Freja, Hat and Hood. We evaluate their usefulness in<br />
practice by applying them to a number of moderately complex programs in which errors had deliberately been introduced. We identify the<br />
strengths and weaknesses of each system and then form ideas on how the systems can be improved further. <br />
<LI>[http://www.cs.mu.oz.au/~lee/papers/dd.html Papers on declarative debugging]<br />
</UL><br />
<br />
==Using Monads==<br />
<UL><br />
<LI>[http://db.ewi.utwente.nl/Publications/PaperStore/db-utwente-0000003696.pdf <EM>The Haskell Programmer's Guide to the IO Monad - Don't Panic.</EM>] Stefan Klinger.<br><br />
This report scratches the surface of category theory, an abstract branch of algebra, just deep enough to find the monad structure. It seems well written.<br />
<LI>[http://www.nomaware.com/monads/html/ <EM>All About Monads</EM>] by Jeff Newbern<br><br />
This tutorial aims to explain the concept of a monad and its<br />
application to functional programming in a way that is easy to<br />
understand and useful to beginning and intermediate Haskell<br />
programmers. Familiarity with the Haskell language is assumed, but no<br />
prior experience with monads is required. <br />
<LI>[http://www.dcs.gla.ac.uk/~nww/Monad.html <EM>What the hell are Monads?</EM>] by Noel Winstanley<BR><br />
A basic introduction to monads, monadic programming and IO.<br />
This introduction is presented by means of examples rather than theory, and assumes a little knowledge of<br />
Haskell. <br />
<LI>[http://www.engr.mun.ca/~theo/Misc/haskell_and_monads.htm <EM>Monads for the Working Haskell Programmer -- a short tutorial</EM>]<br />
by Theodore Norvell.<BR><br />
<LI>[http://www-fp.dcs.st-and.ac.uk/~kh/papers/io-tutorial/io-tutorial.html <EM>Monadic I/O in Haskell 1.3</EM>] by Andrew Gordon and Kevin Hammond.<BR><br />
<STRONG>Abstract:</STRONG><br />
We describe the design and use of monadic I/O in Haskell 1.3, the latest revision of the lazy<br />
functional programming language Haskell. Haskell 1.3 standardises the monadic I/O<br />
mechanisms now available in many Haskell systems. The new facilities allow fairly sophisticated<br />
text-based application programs to be written portably in Haskell. The standard provides<br />
implementors with a flexible framework for extending Haskell to incorporate new language<br />
features. Apart from the use of monads, the main advances over the previous standard are:<br />
character I/O based on handles (analogous to ANSI C file pointers), an error handling<br />
mechanism, terminal interrupt handling and a POSIX interface. Apart from a tutorial description<br />
of the new facilities we include a worked example: a derived monad for combinator parsing. <br />
<!-<br />
"http://www.engr.uconn.edu/~jeffm/FuncProg/Papers/monad.html" Monads Made Easy by Ahmed Hammad<br />
From the Introduction:<br />
This paper is designed to help others who want to know about Monads, but don't want an overly technical<br />
explanation. Here I explain the basics, what monads are, what they are good for, and how to employ them. I do this<br />
by writing a simple exception handling system in Haskell using these features.<br />
-> <br />
<LI>[http://cm.bell-labs.com/cm/cs/who/wadler/topics/monads.html#monadsdeclare <EM>How to Declare an Imperative</EM>] by [http://cm.bell-labs.com/cm/cs/who/wadler/ Philip Wadler], International Logic Programming Symposium '95, MIT Press, 1995.<br />
An extended version will appear in ACM Computing Surveys.<BR><br />
<STRONG>Abstract:</STRONG><br />
This tutorial describes the use of a <em>monad</em> to integrate<br />
interaction into a purely declarative language. This technique has<br />
been implemented in the higher-order functional language Haskell. A<br />
sketch is given of how it might be added to a first-order language for<br />
logic programming.<br />
<br />
<LI>[http://cm.bell-labs.com/cm/cs/who/wadler/topics/monads.html#marktoberdorf <EM>Monads for functional programming</EM>] by [http://cm.bell-labs.com/cm/cs/who/wadler/ Philip Wadler], Marktoberdorf Summer School on Program Design Calculi,<br />
Springer Verlag, NATO ASI Series F: Computer and systems sciences,<br />
Volume 118, August 1992.<BR><br />
<STRONG>Abstract:</STRONG><br />
The use of monads to structure functional programs is described.<br />
Monads provide a convenient framework for simulating effects found in<br />
other languages, such as global state, exception handling, output, or<br />
non-determinism. Three case studies are looked at in detail: how<br />
monads ease the modification of a simple evaluator; how monads act as<br />
the basis of a datatype of arrays subject to in-place update; and how<br />
monads can be used to build parsers.<br />
<br />
<li>[http://www.research.avayalabs.com/user/wadler/topics/monads.html <em>Comprehending monads</em>] by [http://cm.bell-labs.com/cm/cs/who/wadler/ Philip Wadler], Mathematical Structures in Computer Science, Special issue of selected papers from 6'th Conference on Lisp and Functional Programming, 2:461-493, 1992. <br><br />
<strong>Abstract:</strong><br />
Category theorists invented monads in the 1960's to concisely express certain aspects of universal algebra.<br />
Functional programmers invented list comprehensions in the 1970's to concisely express certain programs<br />
involving lists. This paper shows how list comprehensions may be generalised to an arbitrary monad, and<br />
how the resulting programming feature can concisely express in a pure functional language some programs<br />
that manipulate state, handle exceptions, parse text, or invoke continuations. A new solution to the old<br />
problem of destructive array update is also presented. No knowledge of category theory is assumed. <br />
<br />
<LI>[http://cm.bell-labs.com/cm/cs/who/wadler/topics/monads.html#combining-monads <EM>Combining monads</EM>] by [http://cm.bell-labs.com/cm/cs/who/wadler/ Philip Wadler], Glasgow Workshop on Functional Programming, Springer Verlag Workshops in Computing Series,<br />
Ayr, July 1992.<BR><br />
<STRONG>Abstract:</STRONG><br />
Monads provide a way of structuring functional programs. Most real<br />
applications require a combination of primitive monads. Here we<br />
describe how some monads may be combined with others to yield a<br />
<em>combined monad</em>.<br />
<br />
<LI>[http://www.cs.nott.ac.uk/Department/Staff/gmh/bib.html#monparsing <EM>Monadic Parser Combinators</EM>] by <A NAME="Hutton&Meijer96 Graham Huttonand Erik Meijer],<br />
Technical report NOTTCS-TR-96-4, Department of Computer Science, University of Nottingham, 1996. <br />
A condensed version of this report will appear as a functional pearl in JFP.<BR><br />
Besides being a tutorial on parser combinators it is also an introduction to monads in general.<br />
<br />
</UL><br />
<br />
== Side Effects in a Pure Language ==<br />
<br />
<ul><br />
<li>[http://research.microsoft.com/Users/simonpj/papers/marktoberdorf/ <em>Tackling the Awkward Squad: monadic I/O, concurrency, exceptions, and foreign-language calls in Haskell</em>] by Simon Peyton Jones<br><br />
This tutorial focuses on explaining the "bits round the edges" of Haskell programs, rather than the beautiful functional core we all know and love. More specifically, it gives, in a single framework, an account of <br />
<ul><br />
<li>monadic input/output (the I/O monad) <br />
<li>concurrency (threads, MVars) <br />
<li>exceptions (both synchronous and asynchronous) <br />
<li>foreign language interfaces <br />
</ul><br />
The common feature of all of these is, of course, the ubiquitous I/O monad. All except the first (basic I/O) involve proposed extensions to Haskell that are implemented in GHC, and I have tried hard to make the tutorial use exactly the same function names as GHC does. All of the extensions are described in conference papers (also available from my home page), but these papers are not tutorials, and were written with varying nomenclature over a period of several years. I hope that this tutorial gives a more comprehensible overview of the big picuture, using a common vocabulary. <br />
<br />
</ul><br />
<br />
<br />
== Data Structures ==<br />
<UL><br />
<LI>[http://www.cs.columbia.edu/~cdo/ Chris Okasaki]: [http://www.cup.org/Titles/63/0521631246.html <EM>Purely Functional Data Structures</EM>], 232 pp., Cambridge University Press, 1998. ISBN 0-521-63124-6<BR><br />
From the cover:<br />
<BLOCKQUOTE><br />
Most books on data structures assume an imperative language like C or C++. However, data<br />
structures for these languages do not always translate well to functional languages such as<br />
Standard ML, Haskell, or Scheme. This book describes data structures and data structure<br />
design techniques from the point of view of functional languages. It includes code for a wide<br />
assortment both of classical data structures and of data structures developed exclusively for<br />
functional languages.This handy reference for professional programmers working with functional<br />
languages can also be used as a tutorial or for self-study. <br />
<br />
[http://www.cs.columbia.edu/~cdo/pfds-haskell.tar.gz Haskell source code for the book]<br />
</BLOCKQUOTE><br />
<LI><EM>[http://www.iis.sinica.edu.tw/~trc/icfp96.ps A probabilistic approach to the problem of automatic selection of data representations]</EM> by <br />
Tyng-Ruey Chuang and Wen L. Hwang, In Proceedings of the 1996 ACM SIGPLAN International Conference on Functional Programming, pages 190-200. Philadephia, Pennsylvania, USA, May 1996.<br />
</UL><br />
<br />
<H4>Collections</H4><br />
<br />
<UL><br />
<LI>[http://www.dcs.gla.ac.uk/fp/workshops/fpw96/Proceedings96.html#PeytonJones <EM>Bulk types with class</EM>] by Simon Peyton Jones, (electronic) proceedings of the 1996 Glasgow Functional Programming Workshop.<br />
<BR><br />
<STRONG>Abstract:</STRONG><br />
Bulk types - such as lists, bags, sets, finite maps, and priority queues - are ubiquitous in programming. Yet many languages don't support them well, even though they have received a great deal of attention, especially from the database community. Haskell is currently among the culprits. <br />
This paper has two aims: to identify some of the technical difficulties, and to attempt to address them using Haskell's constructor classes. <br />
</UL><br />
<br />
<H4>List-like data structures</H4><br />
<br />
<UL><br />
<LI><EM>Functional Data Structures</EM> by Chris Okasaki. [http://www.cse.ogi.edu/PacSoft/summerschool96.html <EM>Advanced Functional Programming</EM>], Second International Summer School on Advanced Functional Programming Techniques, Evergreen State College, WA, USA, LNCS 1126, 1996 (editors: J. Launchbury, E. Meijer, T. Sheard), p.&nbsp;131-158.<br />
<LI><EM>[http://foxnet.cs.cmu.edu/people/cokasaki/papers.html#random-access Purely Functional Random-Access Lists]</EM> by Chris Okasaki. Functional Programming Languages and Computer Architecture, June 1995, pages 86-95.<br />
<LI><EM>[http://foxnet.cs.cmu.edu/people/cokasaki/papers.html#queues Simple and Efficient Purely Functional Queues and Deques]</EM> by Chris Okasaki. Journal of Functional Programming, 5(4):583-592, October 1995. <br />
<LI><EM>[http://foxnet.cs.cmu.edu/people/cokasaki/papers.html#priority Optimal Purely Functional Priority Queues]</EM> by Gerth St&oslash;lting Brodal and Chris Okasaki, Journal of Functional Programming, 6(6), December 1996.<br />
<LI><EM>[http://www.iis.sinica.edu.tw/~trc/fpca93.ps Real-time deques, multihead Turing machines, and purely functional programming.]</EM> by Tyng-Ruey Chuang and Benjamin Goldberg, In Conference on Functional Programming Languages and Computer Architecture, pages 289-298. Copenhagen, Denmark, June 1993. ACM Press.<br />
</UL><br />
<br />
== Arrays ==<br />
<UL><br />
<LI><EM>[http://www.iis.sinica.edu.tw/~trc/lfp94.ps A randomized implementation of multiple functional arrays]</EM> by Tyng-Ruey Chuang, In Proceedings of the 1994 ACM Conference on Lisp and Functional Programming, pages 173-184. Orlando, Florida, USA, June 1994.<br />
<LI><EM>Fully persistent arrays for efficient incremental updates and voluminous reads</EM> by Tyng-Ruey Chuang.<br />
In Bernd Krieg-Brueckner, editor, 4th European Symposium on Programming, <br />
pages 110-129. Rennes, France, February 1992. LNCS 582. Springer-Verlag. <br />
</UL><br />
<br />
== Graphs ==<br />
<UL><br />
<LI><EM>Graph Algorithms with a Functional Flavour</EM> by [http://www.cse.ogi.edu/~jl/ John Launchbury], Advanced Functional Programming, First International Spring<br />
School on Advanced Functional Programming Techniques, Bastad, Sweden, LNCS 925,p.&nbsp;308-331, 1995 (editors: J. Jeuring, E. Meijer).<br />
<br />
<LI>[http://www.cse.ogi.edu/~jl/biblio-functional.html <EM>Structuring Depth First Search Algorithms in Haskell</EM>] by David King and [http://www.cse.ogi.edu/~jl/ John Launchbury].<br />
Proc. ACM Principles of Programming Languages, San Francisco, 1995.<BR><br />
<STRONG>Abstract:</STRONG><br />
Depth-first search is the key to a wide variety of graph algorithms.<br />
In this paper we express depth-first search in a lazy functional<br />
language, obtaining a linear-time implementation. Unlike traditional<br />
imperative presentations, we use the structuring methods of functional<br />
languages to construct algorithms from individual reusable components.<br />
This style of algorithm construction turns out to be quite amenable to<br />
formal proof, which we exemplify through a calculational-style proof<br />
of a far from obvious strongly-connected components algorithm.<br />
</UL><br />
<br />
== Others ==<br />
<br />
<UL><br />
<LI>[http://www.dcs.glasgow.ac.uk/jfp/bibliography/References/grantswz1996:143.html <EM>Sparse matrix representations in a functional language</EM>] by P.W. Grant, J.A. Sharp, M.F. Webster and X. Zhang, Journal of Functional Programming, 6(1):143-170, January 1996.<BR><br />
<STRONG>Abstract:</STRONG><br />
This paper investigates several sparse matrix representation schemes and associated algorithms in Haskell for solving linear systems of equations arising from solving realistic computational fluid dynamics problems using a finite element algorithm. This work complements that of Wainwright and Sexton [J. Functional Programming, 2(1):61-72, 1992] in that a Choleski direct solver (with an emphasis on its forward/backward substitution steps) is examined. Experimental evidence comparing time and space efficiency of these matrix representation schemes is reported, together with associated forward/backward substitution implementations. Our results are in general agreement with Wainwright and Sexton's.<br />
</UL><br />
<br />
== Parser Combinators ==<br />
<br />
<UL><br />
<LI><EM>How to Replace Failure by a List of Successes</EM> by <A NAME="Wadler85 Philip Wadler],<br />
Functional Programming Languages and Computer Architecture, LNCS 201, 1985.<br />
<LI><EM>Higher-order functions for parsing</EM> by <A NAME="Hutton92 Graham Hutton],<br />
J. Functional Programming 2(3):323-343, 1992.<br />
<LI>[http://www.cs.nott.ac.uk/Department/Staff/gmh/bib.html#monparsing <EM>Monadic Parser Combinators</EM>] by <A NAME="Hutton&Meijer96 Graham Huttonand Erik Meijer],<br />
Technical report NOTTCS-TR-96-4, Department of Computer Science, University of Nottingham, 1996. <br />
A condensed version of this report will appear as a functional pearl in JFP.<BR><br />
Besides being a tutorial on parser combinators it is also an introduction to monads in general.<br />
<LI><EM>Functional Parsers</EM> by <A NAME="Fokker95 Jeroen Fokker],<br />
First International Spring School on Advanced Functional Programming Techniques, LNCS 925, 1995.<br />
<LI><EM>Predictive parser combinators need four values to report errors</EM> by <A NAME="Partridge&Wright96 Andrew Partridge, David Wright],<br />
J. Functional Programming 6(2): 355-364, 1996.<br />
<LI><EM>Combinators for parsing expressions</EM> by <A NAME="Hill96 Steve Hill],<br />
J. Functional Programming 6(3):445-463, May 1996.<br />
<LI>[http://www.cse.ogi.edu/PacSoft/summerschool96.html#Parsers <EM>Deterministic, Error-Correcting Combinator Parsers</EM>]<br />
by <A NAME="Swierstra&Duponcheel96 S. Doaitse Swierstra and Luc Duponcheel], Second International Summer School on Advanced Functional Programming Techniques, LNCS 1126, 1996.<br />
</UL><br />
<br />
==Schools on Advanced Funtional Programming==<br />
<br />
<EM>Advanced Functional Programming</EM>, First International Spring<br />
School on Advanced Functional Programming Techniques, Bastad, Sweden, LNCS 925, Springer-Verlag, 1995 (editors: J. Jeuring, E. Meijer).<br />
*<EM>Functional Parsers</EM> by Jeroen Fokker, p.&nbsp;1-23.<br />
*<EM>Monads for functional programming</EM> by Philip Wadler, p.&nbsp;24-52.<br />
*<EM>The Design of a Pretty-printing Library</EM> by John Hughes, p.&nbsp;52-96.<br />
*<EM>Functional Programming with Overloading and Higher-Order Polymorphism</EM>, Mark P. Jones, p.&nbsp;97-136.<br />
*<EM>Programming with Fudgets</EM> by Thomas Hallgren and Magnus Carlsson, p.&nbsp;137-182.<br />
*<EM>Constructing Medium Sized Efficient Functional Programs in Clean</EM> by Marko C.J.D. van Eekelen and Rinus J. Plasmeijer, p.&nbsp;183-227.<br />
*<EM>Merging Monads and Folds for Functional Programming</EM> by Erik Meijer and Johan Jeuring, p.&nbsp;228-266.<br />
*<EM>Programming with Algebras</EM> by Richard B. Kieburtz and Jeffrey Lewis, p.&nbsp;267-307.<br />
*<EM>Graph Algorithms with a Functional Flavour</EM> by John Launchbury, p.&nbsp;308-331.<br />
<br />
<br />
[http://www.cse.ogi.edu/PacSoft/conf/summerschool96.html <EM>Advanced Functional Programming</EM>], Second International Summer School on Advanced Functional Programming Techniques, Evergreen State College, WA, USA, LNCS 1126, Springer-Verlag, 1996 (editors: J. Launchbury, E. Meijer, T. Sheard).<br />
*<EM>Composing the User Interface with Haggis</EM> by Sigbjorn Finne and Simon Peyton Jones, p.&nbsp;1-37.<br />
*<EM>Haskore Music Tutorial</EM> by Paul Hudak, p.&nbsp;38-67.<br />
*<EM>Polytypic Programming</EM> by Johan Jeuring and Patrick Jansson, p.&nbsp;68-114.<br />
*<EM>Implementing Threads in Standard ML</EM> by Peter Lee, p.&nbsp;115-130.<br />
*<EM>Functional Data Structures</EM> by Chris Okasaki, p.&nbsp;131-158.<br />
*<EM>Heap Profiling for Space Efficiency</EM> by Colin Runciman and Niklas R&ouml;jemo, p.&nbsp;159-183.<br />
*<EM>Deterministic, Error-Correcting Combinator Parsers</EM> by S. Doaitse Swierstra and Luc Duponcheel, p.&nbsp;184-207.<br />
*<EM>Essentials of Standard ML Modules</EM> by Mads Tofte, p.&nbsp;208-238.<br />
<br />
[http://alfa.di.uminho.pt/~afp98/ Advanced Functional Programming, Third International School, AFP'98], <br />
in Braga, Portugal from 12th to 19th September 1998, LNCS 1608, Springer-Verlag, 1999<br />
(editors: D. Swierstra, P. Henriques and J. Oliveira).<BR><br />
All lecture notes and further material are available from the web site.<br />
<br />
<br />
= Foundations =<br />
<ul><br />
<li>Paul Taylor: [http://www.dcs.qmul.ac.uk/~pt/Practical_Foundations/ Practical Foundations of Mathematics]<br><br />
Cambridge University Press, ISBN: 0-521-63107-6, xii+576 pages, September 2000.<br />
<li>Michael Barr and Charles Wells: [http://www.cwru.edu/artsci/math/wells/pub/ttt.html Toposes, Triples and Theories]<br><br />
The revised version of their<br />
formerly Springer Verlag published book is<br />
online for free download. Note that they use the name <em>triple</em> instead of <em>monad</em>.<br />
</ul></div>PaulJohnsonhttps://wiki.haskell.org/BooksBooks2006-02-07T23:15:06Z<p>PaulJohnson: Added pointer to Haskell wikibook</p>
<hr />
<div>=Language Definition=<br />
<br />
<DL><br />
<DT>Simon Peyton Jones: [http://titles.cambridge.org/catalogue.asp?isbn=0521826144 <EM>Haskell 98 Language and Libraries</EM>], Cambridge University Press, 2003, Hardback, 272 pages, ISBN: 0521826144, £35.00<br />
<BR><br />
<BLOCKQUOTE><br />
<B>Book Description</B><BR> <br />
Haskell is the world's leading lazy functional programming language,<br />
widely used for teaching, research, and applications. The language<br />
continues to develop rapidly, but in 1998 the community decided to<br />
capture a stable snapshot of the language: Haskell 98. All Haskell<br />
compilers support Haskell 98, so practitioners and educators alike<br />
have a stable base for their work. This book constitutes the agreed<br />
definition of the Haskell 98, both the language itself and its<br />
supporting libraries. It has been considerably revised and refined<br />
since the original definition, and appears in print for the first<br />
time. It should be a standard reference work for anyone involved in<br />
research, teaching, or application of Haskell.<br />
</BLOCKQUOTE> <br />
</DT></DL><br />
<br />
= Textbooks=<br />
<br />
<DL><br />
<DT>Paul Hudak: [http://www.haskell.org/soe <EM>The Haskell School of Expression: Learning Functional Programming through Multimedia</EM>], Cambridge University Press, New York, 2000, 416<br />
pp, 15 line diagrams, 75 exercises, Paperback $29.95, ISBN:<br />
0521644089, Hardback $74.95, ISBN: 0521643384<br />
<BR><br />
<B>Book Description</B><BR> <br />
This book teaches functional programming as a way of thinking and<br />
problem solving, using Haskell, the most popular purely functional<br />
language. Rather than using the conventional mathematical examples<br />
commonly found in other programming language textbooks, the author<br />
draws examples from multimedia applications, including graphics,<br />
animation, and computer music, thus rewarding the reader with working<br />
programs for inherently more interesting applications. Aimed at both<br />
beginning and advanced programmers, this tutorial begins with a gentle<br />
introduction to functional programming and moves rapidly on to more<br />
advanced topics. An underlying theme is the design and implementation<br />
of domain specific languages, using three examples: FAL (a Functional<br />
Animation Language), IRL (an Imperative Robot Language), and MDL (a<br />
Music Description Language). Details about programming in Haskell<br />
are presented in boxes throughout the text so they can be easily<br />
referred to and found quickly.<br />
<P><br />
The book's Web Site contains source files for all programs in the<br />
text, as well as the graphics libraries to run them under Windows and<br />
Linux platforms. It also contains PowerPoint slides useful for<br />
teaching a course using the textbook.<br />
<br />
<DT>Simon Thompson: [http://www.cs.ukc.ac.uk/people/staff/sjt/craft2e/ <EM>Haskell: The Craft of Functional Programming</EM>], Second Edition,<br />
Addison-Wesley, 507&nbsp;pages, paperback, 1999. ISBN<br />
0-201-34275-8.<BR><br />
<B>Book Description</B><BR> <br />
The second edition of Haskell: The Craft of Functional Programming is essential reading for beginners to functional programming and newcomers to the Haskell programming language. The emphasis is on the process of crafting programs and the text contains many examples and running case studies, as well as advice an program design, testing, problem solving and how to avoid common pitfalls. <br />
<br />
Building on the strengths of the first edition, the book includes many new and improved features: <br />
*Complete coverage of Haskell 98, the standard version of Haskell which will be stable and supported by implementations for years to come. <br />
*An emphasis on software engineering principles, encouraging a disciplined approach to building reusable libraries of software components. <br />
*Detailed coverage of the Hugs interpreter with an appendix covering other implementations. <br />
*A running case study of pictures emphasizes the built-in functions which appear in the standard prelude and libraries. It is also used to give an early preview of some of the more complex language features, such as high-order functions. <br />
*List comprehensions and the standard functions over lists are covered before recursion. <br />
*Early coverage of polymorphism supporting the "toolkit" approach and encouraging the resuse of built-in functions and types. <br />
*Extensive reference material containing details of further reading in books, journals and on the World Wide Web. <br />
*Accompanying Web Site supporting the book, containing all the program code, further teaching materials and other useful resources. <br />
<B>Synopsis</B><BR> <br />
This books introduces Haskell at a level appropriate for those with little or no prior experience of functional programming. The emphasis is on the process of crafting programs, solving problems, and avoiding common errors.<br />
<br />
<DT>Richard Bird: [http://www.prenhall.com/allbooks/ptr_0134843460.html <EM>Introduction to Functional Programming using Haskell</EM>], 2nd edition, Prentice Hall Press, 1998, 460 pp., ISBN: 0-13-484346-0.<BR><br />
From the cover:<br />
<br />
After the success of the first edition, Introduction to Functional Programming using Haskell has been thoroughly updated and revised to provide a complete grounding in the principles and techniques of programming with functions.<br />
<br />
The second edition uses the popular language Haskell to express functional programs. There are new chapters on program optimisation, abstract datatypes in a functional setting, and programming in a monadic style. There are completely new case studies, and many new exercises.<br />
<br />
As in the first edition, there is an emphasis on the fundamental techniques for reasoning about functional programs, and for deriving them systematically from their specifications.<br />
<br />
The book is self-contained, assuming no prior knowledge of programming, and is suitable as an introductory undergraduate text for first- or second-year students.<br />
<br />
<br />
<DT>Antony Davie: [http://www.cup.org/Titles/25/0521258308.html <EM>An Introduction to Functional Programming Systems Using Haskell</EM>], Cambridge University Press, 1992. ISBN 0-521-25830-8 (hardback). ISBN 0-521-27724-8 (paperback).<BR><br />
Cover:<br />
<br />
Functional programming is a style of programming that has become increasingly popular during the past few years.<br />
Applicative programs have the advantage of being almost immediately expressible as functional descriptions; they can<br />
be proved correct and transformed through the referential transparency property.<br />
<br />
This book presents the basic concepts of functional programming, using the language Haskell for examples. The author<br />
incorporates a discussion of lambda calculus and its relationship with Haskell, exploring the implications for<br />
parallelism. Contents: SASL for Beginners / Examples of SASL Programming / More Advanced Applicative Programming<br />
Techniques / Lambda Calculus / The Relationship Between Lambda Calculus and SASL / Program Transformation and<br />
Efficiency / Correctness, Equivalence and Program Verification / Landin's SECD Machine and Related<br />
Implementations / Further Implementation Techniques / Special Purpose Hardware / The Applicative Style of<br />
Semantics / Other Applicative Languages / Implications for Parallelism / Functional Programming in Von Neumann<br />
Languages <br />
<br />
<DT>Fethi Rabhi and Guy Lapalme: [http://www.iro.umontreal.ca/~lapalme/Algorithms-functional.html <EM> Algorithms: A functional programming approach</EM>], <br />
Addison-Wesley, 235&nbsp;pages, paperback, 1999. ISBN<br />
0-201-59604-0<BR><br />
<BLOCKQUOTE><br />
<B>Book Description</B><BR> <br />
The authors challenge more traditional methods of teaching algorithms<br />
by using a functional programming context, with Haskell as an<br />
implementation language. This leads to smaller, clearer and more<br />
elegant programs which enable the programmer to understand the<br />
algorithm more quickly and to use that understanding to explore<br />
alternative solutions. <br><br />
<b>Key features:</b><br />
*Most chapters are self-contained and can be taught independently from each other.<br />
*All programs are in Haskell'98 and provided on a WWW site.<br />
*End of chapter exercises throughout.<br />
*Comprehensive index and bibliographical notes.<br />
<B>Synopsis</B><BR> <br />
The book is organised as a classic algorithms book according to topics<br />
such as Abstract Data Types, sorting and searching. It uses a<br />
succession of practical programming examples to develop in the reader<br />
problem-solving skills which can be easily transferred to other<br />
language paradigms. It also introduces the idea of capturing<br />
algorithmic design strategies (e.g. Divide-and-Conquer, Dynamic<br />
Programming) through higher-order functions.<br><br />
<b>Target audience</b><br><br />
The book is intended for computer science students taking algorithms<br />
and/or (basic or advanced) functional programming courses.<br />
</BLOCKQUOTE><br />
<br />
<dt>Jeremy Gibbons and Oege de Moor (eds.): [http://www.palgrave.com/catalogue/catalogue.asp?Title_Id=0333992857 <em>The Fun of Programming</em>],Palgrave, 2002, 288 pages. ISBN 0333992857.<br />
<blockquote><br />
<b>Book description:</b><br><br />
In this textbook, leading researchers give tutorial expositions on the current state of the art of functional<br />
programming. The text is suitable for an undergraduate course immediately following an introduction to<br />
functional programming, and also for self-study. All new concepts are illustrated by plentiful examples,<br />
as well as exercises. A website gives access to accompanying software.<br />
</blockquote><br />
<br />
<dt> Cordelia Hall and John O'Donnell: [http://www.dcs.gla.ac.uk/~jtod/discrete-mathematics/ <em>Discrete Mathematics Using a Computer</em>],<br />
Springer, 2000, 360 pages. ISBN 1-85233-089-9.<br />
<blockquote><br />
<b>Book description:</b><br><br />
This book introduces the main topics of discrete mathematics with a strong emphasis on<br />
applications to computer science. It uses computer programs to implement and illustrate<br />
the mathematical ideas, helping the reader to gain a concrete understanding of the<br />
abstract mathematics. The programs are also useful for practical calculations, and they<br />
can serve as a foundation for larger software packages. <br />
<br />
Designed for first and second year undergraduate students, the book is also ideally suited<br />
to self-study. No prior knowledge of functional programming is required; the book and<br />
the online documentation provide everything you will need. <br />
</blockquote><br />
<br />
<dt>Kees Doets and Jan van Eijck: [http://www.cwi.nl/~jve/HR <em>The Haskell Road to Logic, Maths and Programming</em>]. King's College Publications, London, 2004. ISBN 0-9543006-9-6 (14.00 pounds, $25.00).<br />
<blockquote><br />
<b>Book description:</b><br><br />
The purpose of this book is to teach logic and mathematical reasoning<br />
in practice, and to connect logical reasoning with computer<br />
programming. Throughout the text, abstract concepts are linked to<br />
concrete representations in Haskell. Everything one has to know about<br />
programming in Haskell to understand the examples in the book is<br />
explained as we go along, but we do not cover every aspect of the<br />
language. Haskell is a marvelous demonstration tool for logic and<br />
maths because its functional character allows implementations to<br />
remain very close to the concepts that get implemented, while the<br />
laziness permits smooth handling of infinite data structures.<br />
<br />
We do not assume that our readers have previous experience with either<br />
programming or construction of formal proofs. We do assume previous<br />
acquaintance with mathematical notation, at the level of secondary<br />
school mathematics. Wherever necessary, we will recall relevant <br />
facts. Everything one needs to know about mathematical<br />
reasoning or programming is explained as we go along. We do assume<br />
that our readers are able to retrieve software from the Internet and<br />
install it, and that they know how to use an editor for constructing<br />
program texts.<br />
<br />
After having worked through the material in the book, i.e., after<br />
having digested the text and having carried out a substantial number<br />
of the exercises, the reader will be able to write interesting<br />
programs, reason about their correctness, and document them in a clear<br />
fashion. The reader will also have learned how to set up mathematical<br />
proofs in a structured way, and how to read and digest mathematical<br />
proofs written by others.<br />
<br />
The book can be used as a course textbook, but since it comes with<br />
solutions to all exercises (electronically available from the authors<br />
upon request) it is also well suited for private study. The source<br />
code of all programs discussed in the text, a list of errata, <br />
further relevant material and an email link to the authors<br />
can be found [http://www.cwi.nl/~jve/HR here].<br />
</blockquote><br />
<br />
<dt>Simon Peyton Jones: <em>Implementation of Functional Programming Language</em>,Prentice-Hall, 1987. ISBN 0134533259.<br />
<blockquote></blockquote><br />
<br />
<dt>Simon Peyton Jones, David Lester: <em>Implementing Functional Languages</em>, 1992.<br><br />
<blockquote><br />
The book is out of print. The full sources and a postscript version are <br />
[http://research.microsoft.com/Users/simonpj/Papers/papers.html available for free].<br />
</blockquote><br />
</DL><br />
<br />
=Papers available on the Web=<br />
<br />
==General Introductions to Haskell==<br />
<br />
<UL><br />
<LI>[http://www.haskell.org/tutorial/ <EM>A <br />
Gentle Introduction to Haskell</EM>] by Paul Hudak, John Peterson, and Joseph H. Fasel.<BR><br />
The title is a bit misleading. Some knowledge of another functional programming language is expected. The emphasis is on the type system and those features which are really new in Haskell (compared to other functional programming languages).<br />
<br />
<li>[http://www-106.ibm.com/developerworks/edu/os-dw-linuxhask-i.html Beginning Haskell] from IBM developerWorks<br><br />
This tutorial targets programmers of imperative languages wanting to learn about functional programming in the language Haskell. If you have programmed in languages such as C, Pascal, Fortran, C++, Java, Cobol, Ada, Perl, TCL, REXX, JavaScript, Visual Basic, or many others, you have been using an imperative paradigm. This tutorial provides a gentle introduction to the paradigm of functional programming, with specific illustrations in the Haskell 98 language. (Free registration required.)<br />
<p><br />
<li>Yet Another Haskell Tutorial by Hal Daume III et al. ([//www.isi.edu/~hdaume/htut/tutorial.ps Postscript], [//www.isi.edu/~hdaume/htut/tutorial.pdf Pdf])<br><br />
A tutorial for Haskell that is still under construction but covers already much ground.<br />
<p><br />
<LI>[http://www.numeric-quest.com/haskell/hcompanion/index.html Haskell Companion] by Jan Skibinski<BR><br />
A tutorial on most common concepts and definitions of functional language Haskell.<br />
<br />
<LI>[http://www.informatik.uni-bonn.de/~ralf/teaching/Hskurs_toc.html Online Haskell Course] by Ralf Hinze (in German).<br />
<br />
<LI>[functional-programming.dvi <EM>Functional Programming</EM><br />
by Jeroen Fokker, 1995.](153 pages, 600 KB)<BR><br />
Textbook for learning functional programming with Gofer. <br />
Here without Chapters&nbsp;6 and&nbsp;7. <br />
<br />
<LI>[http://www.cs.ou.edu/cs1323h/textbook/haskell.shtml <EM>Two Dozen Short Lessons in Haskell</EM> by Rex Page].<br />
A draft of a textbook on functional programming, available by ftp. <br />
It calls for active participation from readers by omitting<br />
material at certain points and asking the reader to attempt to fill in the missing <br />
information based on knowledge they have already acquired. The missing information is then <br />
supplied on the reverse side of the page. <br />
<br />
<LI>[haskeller.dvi <EM>The Little Haskeller</EM>] by Cordelia Hall and John Hughes, 9. November 1993, 26 pages.<BR><br />
An introduction using the Chalmers Haskell B interpreter (hbi).<br />
Attention: it relies very much on the user interface of hbi which is quite<br />
different for other Haskell systems.<br />
<br />
<LI>[http://www.di.uminho.pt/afp98/PAPERS/Tutorial.ps <EM>Haskell Tutorial</EM>]<br />
by José Barros and João Almeida.<br />
From a course given at the [http://www.di.uminho.pt/afp98/preprogram/html 3rd International Summer School on Advanced Functional Programming].<br />
<p><br />
<li>[http://www.cs.mu.oz.au/~bjpop/papers/mira2hask.ps.gz <em>Haskell for Miranda Programmers</em>] by Kevin Glynn and Bernie Pope.<br />
<p><br />
<li>[http://pleac.sourceforge.net/pleac_haskell/t1.html <em>PLEAC-Haskell</em>]<br><br />
Following the Perl Cookbook (by Tom Christiansen and Nathan Torkington, published by O'Reilly) spirit, the PLEAC Project aims to gather fans of programming, in order to implement the solutions in other programming languages.<br />
<p><br />
<li>[ftp://ftp.geoinfo.tuwien.ac.at/navratil/HaskellTutorial.pdf <em>Haskell-Tutorial</em>] by Damir Medak and Gerhard Navratil<br><br />
The fundamentals of functional languages for beginners.<br />
<LI>[http://www.reid-consulting-uk.ltd.uk/docs/ffi.html A Guide to Haskell's Foreign Function Interface] A guide to using the foreign function interface extension, using the rich set of functions in the Foreign libraries, design issues, and FFI preprocessors.<br />
<LI>[http://en.wikibooks.org/wiki/Programming:Haskell <em>Programming Haskell Wikibook</em>] is a communal effort by several authors to produce the definitive Haskell textbook. Its very much a work in progress at the moment, and contributions are welcome.<br />
</ul><br />
<br />
==References==<br />
<ul><br />
<li>[http://www.cs.uu.nl/~afie/haskell/tourofsyntax.html <em>Tour of the Haskell Syntax</em>] by Arjan van IJzendoorn.<br />
<li>[http://zvon.org/other/haskell/Outputglobal/index.html <em>Haskell Reference</em>] by Miloslav Nic.<br />
<li>[http://www.cs.uu.nl/~afie/haskell/tourofprelude.html <em>A Tour of the Haskell Prelude</em>] by Bernie Pope and Arjan van IJzendoorn.<br />
<li>[http://www.cse.unsw.edu.au/~paull/cs1011/inbuilt.html <em>Useful Haskell functions</em>]<br />
An explanation for beginners of many Haskell functions that are predefined in the Haskell Prelude.<br />
</ul><br />
<br />
<br />
== Motivation for Using Haskell ==<br />
<UL><br />
<LI>[http://www.md.chalmers.se/~rjmh/Papers/whyfp.html <EM>Why Functional Programming Matters</EM>] by [http://www.md.chalmers.se/~rjmh/ John Hughes], The Computer Journal, Vol. 32, No. 2, 1989, pp. 98 - 107. Also in: David A. Turner (ed.): Research Topics in Functional Programming, Addison-Wesley, 1990, pp. 17 - 42.<BR><br />
Exposes the advantages of functional programming languages.<br />
Demonstrates how higher-order functions and lazy evaluation enable new forms<br />
of modularization of programs.<br />
<br />
<LI><br />
[http://www.cs.ukc.ac.uk/pubs/1997/224/index.html <EM>Higher-order + Polymorphic = Reusable</EM>] by [http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson]. Unpublished, May 1997.<BR><br />
<STRONG>Abstract:</STRONG><br />
This paper explores how certain ideas in object oriented languages have their correspondents in functional languages. In particular we look at the analogue of the iterators of the C++ standard template library. We also give an example of the use of constructor classes which feature in Haskell 1.3 and Gofer.<br />
<br />
</UL><br />
<br />
==Analysis and Design Methods==<br />
<br />
<ul><br />
<li>[http://www.cs.ukc.ac.uk/pubs/2001/1152/index.html <em>FAD: A Functional Analysis and Design Methodology</em>] by Dan Russell.<br />
Phd thesis, Computing Laboratory, University of Kent at Canterbury, January 2001.<br><br />
<STRONG>Abstract:</STRONG><br />
This thesis presents the functional analysis and design methodology FAD. By functional we mean that it naturally supports<br />
software development within the functional programming paradigm (FP). <br />
<p><br />
Every popular methodology has a graphical modelling language which presents various pictorial representations of a<br />
system. FAD's modelling language provides the typical elements of functional programming, types and functions, plus<br />
elements to support modular development such as modules, subsystems and two forms of signature which specify an<br />
interface or a behavioural requirement. The language also includes relationships and associations between these<br />
elements, and provides simple representations of functional designs. The methodology has an integrated set of techniques<br />
which guide the development of an implementable solution from the deliverables of requirements engineering. FAD's data<br />
dictionary provides an organised repository for entities during and after development. <br />
<p><br />
The thesis thus provides a development medium which has hitherto been absent from the functional programming paradigm. <br />
</ul><br />
<br />
<br />
== Teaching Haskell == <br />
<UL><br />
<LI><br />
[http://www.cs.ukc.ac.uk/pubs/1997/208/index.html <EM>Where do I begin? A problem solving approach to teaching functional programming</EM>]<br />
by [http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson].<br />
In Krzysztof Apt, Pieter Hartel, and Paul Klint, editors, First International Conference on Declarative Programming Languages in Education. Springer-Verlag, September 1997.<br />
<BR><br />
<STRONG>Abstract:</STRONG><br />
This paper introduces a problem solving method for teaching functional programming, based on Polya's `How To Solve It', an introductory investigation of mathematical method. We first present the language independent version, and then show in particular how it applies to the development of programs in Haskell. The method is illustrated by a sequence of examples and a larger case study. <br />
<br />
<LI><br />
[http://www.cs.ukc.ac.uk/pubs/1995/214/index.html <EM>Functional programming through the curriculum</EM>] by<br />
[http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson]and Steve Hill.<br />
In Pieter H. Hartel and Rinus Plasmeijer, editors, Functional Programming<br />
Languages in Education, LNCS 1022, pages 85-102. Springer-Verlag, December 1995.<br />
<BR><br />
<STRONG>Abstract:</STRONG><br />
This paper discusses our experience in using a functional language in topics across the computer science curriculum. After examining the arguments for taking a functional approach, we look in detail at four case studies from different areas: programming language semantics, machine architectures, graphics and formal languages. <br />
</UL><br />
<br />
<br />
== Proving Program Correctness ==<br />
<br />
<UL><br />
<LI><br />
[http://www.cs.ukc.ac.uk/pubs/1992/123/index.html <EM>Formulating Haskell</EM>] by<br />
[http://www.cs.ukc.ac.uk/people/staff/sjt/index.html Simon Thompson].<br />
Technical Report 29-92*, University of Kent, Computing Laboratory, University of Kent, Canterbury, UK, November 1992.<br />
<BR><br />
<STRONG>Abstract:</STRONG><br />
The functional programming language Haskell is examined from the point of view of proving programs correct. Particular features explored include the data type definition facilities, classes, the behaviour of patterns and guards and the monad approach to IO in the Glasgow Haskell compiler. <br />
</UL><br />
<br />
==Debugging Programs==<br />
<br />
<UL><br />
<LI>[http://www.cs.mu.oz.au/~bjpop/thesis.ps.gz <EM>Buddha: A Declarative Debugger for Haskell</EM>] by [http://www.cs.mu.oz.au/~bjpop/ Bernie Pope]. Honours Thesis.<br />
<li>[http://www-users.cs.york.ac.uk/~olaf/PUBLICATIONS/frejaHatHood.html <em>Freja, Hat and Hood - A Comparative Evaluation of Three Systems for Tracing and Debugging Lazy Functional Programs</em>] by Olaf Chitil, Colin Runciman and Malcolm Wallace.<br />
Proceedings of the 12th International Workshop on Implementation of Functional<br />
Languages, 2001.<br><br />
<STRONG>Abstract:</STRONG><br />
In this paper we compare three systems for tracing and debugging Haskell programs: Freja, Hat and Hood. We evaluate their usefulness in<br />
practice by applying them to a number of moderately complex programs in which errors had deliberately been introduced. We identify the<br />
strengths and weaknesses of each system and then form ideas on how the systems can be improved further. <br />
<LI>[http://www.cs.mu.oz.au/~lee/papers/dd.html Papers on declarative debugging]<br />
</UL><br />
<br />
==Using Monads==<br />
<UL><br />
<LI>[http://www.nomaware.com/monads/html/ <EM>All About Monads</EM>] by Jeff Newbern<br><br />
This tutorial aims to explain the concept of a monad and its<br />
application to functional programming in a way that is easy to<br />
understand and useful to beginning and intermediate Haskell<br />
programmers. Familiarity with the Haskell language is assumed, but no<br />
prior experience with monads is required. <br />
<LI>[http://www.dcs.gla.ac.uk/~nww/Monad.html <EM>What the hell are Monads?</EM>] by Noel Winstanley<BR><br />
A basic introduction to monads, monadic programming and IO.<br />
This introduction is presented by means of examples rather than theory, and assumes a little knowledge of<br />
Haskell. <br />
<LI>[http://www.engr.mun.ca/~theo/Misc/haskell_and_monads.htm <EM>Monads for the Working Haskell Programmer -- a short tutorial</EM>]<br />
by Theodore Norvell.<BR><br />
<LI>[http://www-fp.dcs.st-and.ac.uk/~kh/papers/io-tutorial/io-tutorial.html <EM>Monadic I/O in Haskell 1.3</EM>] by Andrew Gordon and Kevin Hammond.<BR><br />
<STRONG>Abstract:</STRONG><br />
We describe the design and use of monadic I/O in Haskell 1.3, the latest revision of the lazy<br />
functional programming language Haskell. Haskell 1.3 standardises the monadic I/O<br />
mechanisms now available in many Haskell systems. The new facilities allow fairly sophisticated<br />
text-based application programs to be written portably in Haskell. The standard provides<br />
implementors with a flexible framework for extending Haskell to incorporate new language<br />
features. Apart from the use of monads, the main advances over the previous standard are:<br />
character I/O based on handles (analogous to ANSI C file pointers), an error handling<br />
mechanism, terminal interrupt handling and a POSIX interface. Apart from a tutorial description<br />
of the new facilities we include a worked example: a derived monad for combinator parsing. <br />
<!-<br />
"http://www.engr.uconn.edu/~jeffm/FuncProg/Papers/monad.html" Monads Made Easy by Ahmed Hammad<br />
From the Introduction:<br />
This paper is designed to help others who want to know about Monads, but don't want an overly technical<br />
explanation. Here I explain the basics, what monads are, what they are good for, and how to employ them. I do this<br />
by writing a simple exception handling system in Haskell using these features.<br />
-> <br />
<LI>[http://cm.bell-labs.com/cm/cs/who/wadler/topics/monads.html#monadsdeclare <EM>How to Declare an Imperative</EM>] by [http://cm.bell-labs.com/cm/cs/who/wadler/ Philip Wadler], International Logic Programming Symposium '95, MIT Press, 1995.<br />
An extended version will appear in ACM Computing Surveys.<BR><br />
<STRONG>Abstract:</STRONG><br />
This tutorial describes the use of a <em>monad</em> to integrate<br />
interaction into a purely declarative language. This technique has<br />
been implemented in the higher-order functional language Haskell. A<br />
sketch is given of how it might be added to a first-order language for<br />
logic programming.<br />
<br />
<LI>[http://cm.bell-labs.com/cm/cs/who/wadler/topics/monads.html#marktoberdorf <EM>Monads for functional programming</EM>] by [http://cm.bell-labs.com/cm/cs/who/wadler/ Philip Wadler], Marktoberdorf Summer School on Program Design Calculi,<br />
Springer Verlag, NATO ASI Series F: Computer and systems sciences,<br />
Volume 118, August 1992.<BR><br />
<STRONG>Abstract:</STRONG><br />
The use of monads to structure functional programs is described.<br />
Monads provide a convenient framework for simulating effects found in<br />
other languages, such as global state, exception handling, output, or<br />
non-determinism. Three case studies are looked at in detail: how<br />
monads ease the modification of a simple evaluator; how monads act as<br />
the basis of a datatype of arrays subject to in-place update; and how<br />
monads can be used to build parsers.<br />
<br />
<li>[http://www.research.avayalabs.com/user/wadler/topics/monads.html <em>Comprehending monads</em>] by [http://cm.bell-labs.com/cm/cs/who/wadler/ Philip Wadler], Mathematical Structures in Computer Science, Special issue of selected papers from 6'th Conference on Lisp and Functional Programming, 2:461-493, 1992. <br><br />
<strong>Abstract:</strong><br />
Category theorists invented monads in the 1960's to concisely express certain aspects of universal algebra.<br />
Functional programmers invented list comprehensions in the 1970's to concisely express certain programs<br />
involving lists. This paper shows how list comprehensions may be generalised to an arbitrary monad, and<br />
how the resulting programming feature can concisely express in a pure functional language some programs<br />
that manipulate state, handle exceptions, parse text, or invoke continuations. A new solution to the old<br />
problem of destructive array update is also presented. No knowledge of category theory is assumed. <br />
<br />
<LI>[http://cm.bell-labs.com/cm/cs/who/wadler/topics/monads.html#combining-monads <EM>Combining monads</EM>] by [http://cm.bell-labs.com/cm/cs/who/wadler/ Philip Wadler], Glasgow Workshop on Functional Programming, Springer Verlag Workshops in Computing Series,<br />
Ayr, July 1992.<BR><br />
<STRONG>Abstract:</STRONG><br />
Monads provide a way of structuring functional programs. Most real<br />
applications require a combination of primitive monads. Here we<br />
describe how some monads may be combined with others to yield a<br />
<em>combined monad</em>.<br />
<br />
<LI>[http://www.cs.nott.ac.uk/Department/Staff/gmh/bib.html#monparsing <EM>Monadic Parser Combinators</EM>] by <A NAME="Hutton&Meijer96 Graham Huttonand Erik Meijer],<br />
Technical report NOTTCS-TR-96-4, Department of Computer Science, University of Nottingham, 1996. <br />
A condensed version of this report will appear as a functional pearl in JFP.<BR><br />
Besides being a tutorial on parser combinators it is also an introduction to monads in general.<br />
<br />
</UL><br />
<br />
== Side Effects in a Pure Language ==<br />
<br />
<ul><br />
<li>[http://research.microsoft.com/Users/simonpj/papers/marktoberdorf/ <em>Tackling the Awkward Squad: monadic I/O, concurrency, exceptions, and foreign-language calls in Haskell</em>] by Simon Peyton Jones<br><br />
This tutorial focuses on explaining the "bits round the edges" of Haskell programs, rather than the beautiful functional core we all know and love. More specifically, it gives, in a single framework, an account of <br />
<ul><br />
<li>monadic input/output (the I/O monad) <br />
<li>concurrency (threads, MVars) <br />
<li>exceptions (both synchronous and asynchronous) <br />
<li>foreign language interfaces <br />
</ul><br />
The common feature of all of these is, of course, the ubiquitous I/O monad. All except the first (basic I/O) involve proposed extensions to Haskell that are implemented in GHC, and I have tried hard to make the tutorial use exactly the same function names as GHC does. All of the extensions are described in conference papers (also available from my home page), but these papers are not tutorials, and were written with varying nomenclature over a period of several years. I hope that this tutorial gives a more comprehensible overview of the big picuture, using a common vocabulary. <br />
<br />
</ul><br />
<br />
<br />
== Data Structures ==<br />
<UL><br />
<LI>[http://www.cs.columbia.edu/~cdo/ Chris Okasaki]: [http://www.cup.org/Titles/63/0521631246.html <EM>Purely Functional Data Structures</EM>], 232 pp., Cambridge University Press, 1998. ISBN 0-521-63124-6<BR><br />
From the cover:<br />
<BLOCKQUOTE><br />
Most books on data structures assume an imperative language like C or C++. However, data<br />
structures for these languages do not always translate well to functional languages such as<br />
Standard ML, Haskell, or Scheme. This book describes data structures and data structure<br />
design techniques from the point of view of functional languages. It includes code for a wide<br />
assortment both of classical data structures and of data structures developed exclusively for<br />
functional languages.This handy reference for professional programmers working with functional<br />
languages can also be used as a tutorial or for self-study. <br />
<br />
[http://www.cs.columbia.edu/~cdo/pfds-haskell.tar.gz Haskell source code for the book]<br />
</BLOCKQUOTE><br />
<LI><EM>[http://www.iis.sinica.edu.tw/~trc/icfp96.ps A probabilistic approach to the problem of automatic selection of data representations]</EM> by <br />
Tyng-Ruey Chuang and Wen L. Hwang, In Proceedings of the 1996 ACM SIGPLAN International Conference on Functional Programming, pages 190-200. Philadephia, Pennsylvania, USA, May 1996.<br />
</UL><br />
<br />
<H4>Collections</H4><br />
<br />
<UL><br />
<LI>[http://www.dcs.gla.ac.uk/fp/workshops/fpw96/Proceedings96.html#PeytonJones <EM>Bulk types with class</EM>] by Simon Peyton Jones, (electronic) proceedings of the 1996 Glasgow Functional Programming Workshop.<br />
<BR><br />
<STRONG>Abstract:</STRONG><br />
Bulk types - such as lists, bags, sets, finite maps, and priority queues - are ubiquitous in programming. Yet many languages don't support them well, even though they have received a great deal of attention, especially from the database community. Haskell is currently among the culprits. <br />
This paper has two aims: to identify some of the technical difficulties, and to attempt to address them using Haskell's constructor classes. <br />
</UL><br />
<br />
<H4>List-like data structures</H4><br />
<br />
<UL><br />
<LI><EM>Functional Data Structures</EM> by Chris Okasaki. [http://www.cse.ogi.edu/PacSoft/summerschool96.html <EM>Advanced Functional Programming</EM>], Second International Summer School on Advanced Functional Programming Techniques, Evergreen State College, WA, USA, LNCS 1126, 1996 (editors: J. Launchbury, E. Meijer, T. Sheard), p.&nbsp;131-158.<br />
<LI><EM>[http://foxnet.cs.cmu.edu/people/cokasaki/papers.html#random-access Purely Functional Random-Access Lists]</EM> by Chris Okasaki. Functional Programming Languages and Computer Architecture, June 1995, pages 86-95.<br />
<LI><EM>[http://foxnet.cs.cmu.edu/people/cokasaki/papers.html#queues Simple and Efficient Purely Functional Queues and Deques]</EM> by Chris Okasaki. Journal of Functional Programming, 5(4):583-592, October 1995. <br />
<LI><EM>[http://foxnet.cs.cmu.edu/people/cokasaki/papers.html#priority Optimal Purely Functional Priority Queues]</EM> by Gerth St&oslash;lting Brodal and Chris Okasaki, Journal of Functional Programming, 6(6), December 1996.<br />
<LI><EM>[http://www.iis.sinica.edu.tw/~trc/fpca93.ps Real-time deques, multihead Turing machines, and purely functional programming.]</EM> by Tyng-Ruey Chuang and Benjamin Goldberg, In Conference on Functional Programming Languages and Computer Architecture, pages 289-298. Copenhagen, Denmark, June 1993. ACM Press.<br />
</UL><br />
<br />
== Arrays ==<br />
<UL><br />
<LI><EM>[http://www.iis.sinica.edu.tw/~trc/lfp94.ps A randomized implementation of multiple functional arrays]</EM> by Tyng-Ruey Chuang, In Proceedings of the 1994 ACM Conference on Lisp and Functional Programming, pages 173-184. Orlando, Florida, USA, June 1994.<br />
<LI><EM>Fully persistent arrays for efficient incremental updates and voluminous reads</EM> by Tyng-Ruey Chuang.<br />
In Bernd Krieg-Brueckner, editor, 4th European Symposium on Programming, <br />
pages 110-129. Rennes, France, February 1992. LNCS 582. Springer-Verlag. <br />
</UL><br />
<br />
== Graphs ==<br />
<UL><br />
<LI><EM>Graph Algorithms with a Functional Flavour</EM> by [http://www.cse.ogi.edu/~jl/ John Launchbury], Advanced Functional Programming, First International Spring<br />
School on Advanced Functional Programming Techniques, Bastad, Sweden, LNCS 925,p.&nbsp;308-331, 1995 (editors: J. Jeuring, E. Meijer).<br />
<br />
<LI>[http://www.cse.ogi.edu/~jl/biblio-functional.html <EM>Structuring Depth First Search Algorithms in Haskell</EM>] by David King and [http://www.cse.ogi.edu/~jl/ John Launchbury].<br />
Proc. ACM Principles of Programming Languages, San Francisco, 1995.<BR><br />
<STRONG>Abstract:</STRONG><br />
Depth-first search is the key to a wide variety of graph algorithms.<br />
In this paper we express depth-first search in a lazy functional<br />
language, obtaining a linear-time implementation. Unlike traditional<br />
imperative presentations, we use the structuring methods of functional<br />
languages to construct algorithms from individual reusable components.<br />
This style of algorithm construction turns out to be quite amenable to<br />
formal proof, which we exemplify through a calculational-style proof<br />
of a far from obvious strongly-connected components algorithm.<br />
</UL><br />
<br />
== Others ==<br />
<br />
<UL><br />
<LI>[http://www.dcs.glasgow.ac.uk/jfp/bibliography/References/grantswz1996:143.html <EM>Sparse matrix representations in a functional language</EM>] by P.W. Grant, J.A. Sharp, M.F. Webster and X. Zhang, Journal of Functional Programming, 6(1):143-170, January 1996.<BR><br />
<STRONG>Abstract:</STRONG><br />
This paper investigates several sparse matrix representation schemes and associated algorithms in Haskell for solving linear systems of equations arising from solving realistic computational fluid dynamics problems using a finite element algorithm. This work complements that of Wainwright and Sexton [J. Functional Programming, 2(1):61-72, 1992] in that a Choleski direct solver (with an emphasis on its forward/backward substitution steps) is examined. Experimental evidence comparing time and space efficiency of these matrix representation schemes is reported, together with associated forward/backward substitution implementations. Our results are in general agreement with Wainwright and Sexton's.<br />
</UL><br />
<br />
== Parser Combinators ==<br />
<br />
<UL><br />
<LI><EM>How to Replace Failure by a List of Successes</EM> by <A NAME="Wadler85 Philip Wadler],<br />
Functional Programming Languages and Computer Architecture, LNCS 201, 1985.<br />
<LI><EM>Higher-order functions for parsing</EM> by <A NAME="Hutton92 Graham Hutton],<br />
J. Functional Programming 2(3):323-343, 1992.<br />
<LI>[http://www.cs.nott.ac.uk/Department/Staff/gmh/bib.html#monparsing <EM>Monadic Parser Combinators</EM>] by <A NAME="Hutton&Meijer96 Graham Huttonand Erik Meijer],<br />
Technical report NOTTCS-TR-96-4, Department of Computer Science, University of Nottingham, 1996. <br />
A condensed version of this report will appear as a functional pearl in JFP.<BR><br />
Besides being a tutorial on parser combinators it is also an introduction to monads in general.<br />
<LI><EM>Functional Parsers</EM> by <A NAME="Fokker95 Jeroen Fokker],<br />
First International Spring School on Advanced Functional Programming Techniques, LNCS 925, 1995.<br />
<LI><EM>Predictive parser combinators need four values to report errors</EM> by <A NAME="Partridge&Wright96 Andrew Partridge, David Wright],<br />
J. Functional Programming 6(2): 355-364, 1996.<br />
<LI><EM>Combinators for parsing expressions</EM> by <A NAME="Hill96 Steve Hill],<br />
J. Functional Programming 6(3):445-463, May 1996.<br />
<LI>[http://www.cse.ogi.edu/PacSoft/summerschool96.html#Parsers <EM>Deterministic, Error-Correcting Combinator Parsers</EM>]<br />
by <A NAME="Swierstra&Duponcheel96 S. Doaitse Swierstra and Luc Duponcheel], Second International Summer School on Advanced Functional Programming Techniques, LNCS 1126, 1996.<br />
</UL><br />
<br />
==Schools on Advanced Funtional Programming==<br />
<br />
<EM>Advanced Functional Programming</EM>, First International Spring<br />
School on Advanced Functional Programming Techniques, Bastad, Sweden, LNCS 925, Springer-Verlag, 1995 (editors: J. Jeuring, E. Meijer).<br />
*<EM>Functional Parsers</EM> by Jeroen Fokker, p.&nbsp;1-23.<br />
*<EM>Monads for functional programming</EM> by Philip Wadler, p.&nbsp;24-52.<br />
*<EM>The Design of a Pretty-printing Library</EM> by John Hughes, p.&nbsp;52-96.<br />
*<EM>Functional Programming with Overloading and Higher-Order Polymorphism</EM>, Mark P. Jones, p.&nbsp;97-136.<br />
*<EM>Programming with Fudgets</EM> by Thomas Hallgren and Magnus Carlsson, p.&nbsp;137-182.<br />
*<EM>Constructing Medium Sized Efficient Functional Programs in Clean</EM> by Marko C.J.D. van Eekelen and Rinus J. Plasmeijer, p.&nbsp;183-227.<br />
*<EM>Merging Monads and Folds for Functional Programming</EM> by Erik Meijer and Johan Jeuring, p.&nbsp;228-266.<br />
*<EM>Programming with Algebras</EM> by Richard B. Kieburtz and Jeffrey Lewis, p.&nbsp;267-307.<br />
*<EM>Graph Algorithms with a Functional Flavour</EM> by John Launchbury, p.&nbsp;308-331.<br />
<br />
<br />
[http://www.cse.ogi.edu/PacSoft/conf/summerschool96.html <EM>Advanced Functional Programming</EM>], Second International Summer School on Advanced Functional Programming Techniques, Evergreen State College, WA, USA, LNCS 1126, Springer-Verlag, 1996 (editors: J. Launchbury, E. Meijer, T. Sheard).<br />
*<EM>Composing the User Interface with Haggis</EM> by Sigbjorn Finne and Simon Peyton Jones, p.&nbsp;1-37.<br />
*<EM>Haskore Music Tutorial</EM> by Paul Hudak, p.&nbsp;38-67.<br />
*<EM>Polytypic Programming</EM> by Johan Jeuring and Patrick Jansson, p.&nbsp;68-114.<br />
*<EM>Implementing Threads in Standard ML</EM> by Peter Lee, p.&nbsp;115-130.<br />
*<EM>Functional Data Structures</EM> by Chris Okasaki, p.&nbsp;131-158.<br />
*<EM>Heap Profiling for Space Efficiency</EM> by Colin Runciman and Niklas R&ouml;jemo, p.&nbsp;159-183.<br />
*<EM>Deterministic, Error-Correcting Combinator Parsers</EM> by S. Doaitse Swierstra and Luc Duponcheel, p.&nbsp;184-207.<br />
*<EM>Essentials of Standard ML Modules</EM> by Mads Tofte, p.&nbsp;208-238.<br />
<br />
[http://alfa.di.uminho.pt/~afp98/ Advanced Functional Programming, Third International School, AFP'98], <br />
in Braga, Portugal from 12th to 19th September 1998, LNCS 1608, Springer-Verlag, 1999<br />
(editors: D. Swierstra, P. Henriques and J. Oliveira).<BR><br />
All lecture notes and further material are available from the web site.<br />
<br />
<br />
= Foundations =<br />
<ul><br />
<li>Paul Taylor: [http://www.dcs.qmul.ac.uk/~pt/Practical_Foundations/ Practical Foundations of Mathematics]<br><br />
Cambridge University Press, ISBN: 0-521-63107-6, xii+576 pages, September 2000.<br />
<li>Michael Barr and Charles Wells: [http://www.cwru.edu/artsci/math/wells/pub/ttt.html Toposes, Triples and Theories]<br><br />
The revised version of their<br />
formerly Springer Verlag published book is<br />
online for free download. Note that they use the name <em>triple</em> instead of <em>monad</em>.<br />
</ul></div>PaulJohnson