https://wiki.haskell.org/api.php?action=feedcontributions&user=Sjoerd+visscher&feedformat=atomHaskellWiki - User contributions [en]2017-02-22T10:38:10ZUser contributionsMediaWiki 1.19.14+dfsg-1https://wiki.haskell.org/User:Sjoerd_visscherUser:Sjoerd visscher2013-09-01T16:23:58Z<p>Sjoerd visscher: </p>
<hr />
<div>* [https://github.com/sjoerdvisscher/ My Github profile]<br />
* [https://github.com/sjoerdvisscher/blog My blog]<br />
* [http://w3future.com/weblog/ My old weblog]</div>Sjoerd visscherhttps://wiki.haskell.org/User:Sjoerd_visscherUser:Sjoerd visscher2013-09-01T16:23:42Z<p>Sjoerd visscher: </p>
<hr />
<div>[https://github.com/sjoerdvisscher/ My Github profile]<br />
[https://github.com/sjoerdvisscher/blog My blog]<br />
[http://w3future.com/weblog/ My old weblog]</div>Sjoerd visscherhttps://wiki.haskell.org/ZuriHac2013ZuriHac20132013-09-01T14:36:49Z<p>Sjoerd visscher: /* Demoday */</p>
<hr />
<div>[[Image:zurihac2013.png|right]]<br />
<br />
Zurich FP Afternoon:<br />
----<br />
{|<br />
|When:<br />
|Thursday, Aug 29th 2013<br />
|-<br />
|Hours:<br />
|13:00 ~ 18:00<br />
|-<br />
|Where:<br />
|ETH, Zurich, Switzerland<br />
|}<br />
----<br />
<br />
ZuriHac 2013:<br />
<br />
----<br />
{|<br />
|When:<br />
|Friday, Aug 30th 2013 – Sunday, Sep 1st 2013<br />
|-<br />
|Hours:<br />
|09:00 ~ 20:00<br />
|-<br />
|Where:<br />
|Erudify, Zurich, Switzerland<br />
|}<br />
----<br />
<br />
'''Important:'''<br><br />
Switzerland has [http://en.wikipedia.org/wiki/AC_power_plugs_and_sockets#Swiss_SEV_1011_.28Swiss_10.C2.A0A.2F250.C2.A0V.29.28Type_J.29 its own power sockets]. We can't provide converters for everybody so make sure to bring one along. Do note that the [http://en.wikipedia.org/wiki/AC_power_plugs_and_sockets#CEE_7.2F16_Europlug_.28Type_C.29 Europlug] will fit in a Swiss power socket. There's an electronics shop [https://maps.google.ch/maps?q=Fust+Center+Eschenmoser&hl=en&cid=6177809817081314569&gl=CH&t=m&z=16&iwloc=A Fust Center Eschenmoser] very near our office where you can buy converters.<br />
<br />
&nbsp;<br />
<br />
== About ==<br />
<br />
On Thursday, 29 August 2013 the Zurich HaskellerZ Meetup group will hold the "Zurich FP Afternoon". This will be a half-day event consisting of talks themed "Functional Programming in Industry". It will be held at ETH and will start with a keynote from Simon Marlow!<br />
<br />
The Zurich FP Afternoon is followed by ZuriHac 2013, a three day Haskell Hackathon from Friday, 30 August until Sunday, 1 September hosted at the Erudify offices.<br />
<br />
The Haskell Hackathon is an international, grassroots collaborative coding festival with a simple focus: build and improve Haskell libraries, tools, and infrastructure.<br />
<br />
This is a great opportunity to meet your fellow haskellers in real life,<br />
find new contributors for your project, improve existing libraries and tools or<br />
even start new ones!<br />
<br />
See [[ZuriHac]] for previous Hackathons in Zurich.<br />
<br />
== Sponsors ==<br />
http://www.erudify.com/assets/img/erudify-logo.png<br />
<br />
[https://erudify.com Erudify] will host the Hackathon.<br />
<br />
<br />
http://i.imgur.com/5cdqsFU.png<br />
<br />
[http://www.google.com/about/jobs/locations/zurich/ Google Switzerland] are providing financial and food support<br />
<br />
[[Image:ETH.png|450px]]<br />
<br />
[http://eth.ch ETH] will host the Zurich FP Afternoon.<br />
<br />
== News ==<br />
;19 August 2013<br />
:[http://www.google.com/about/jobs/locations/zurich/ Google Switzerland] is an official co-sponsor of ZuriHac 2013.<br> This enables us to give all attendees this free T-shirt:<br> [[Image:T_Shirt_ZuriHac_2013_front_1.jpg|250px]][[Image:T_Shirt_ZuriHac_2013_back_1.jpg|250px]]<br> and free food and drinks during the FP Afternoon!<br> Thanks Google!<br />
<br />
;24 July 2013<br />
:Completed [[ZuriHac2013#Schedule|speakers schedule]] for the FP Afternoon.<br />
<br />
;10 June 2013<br />
:[http://bit.ly/ZuriHac2013Reg Registration] is now open!<br />
<br />
== Registration ==<br />
To register please fill in the [http://bit.ly/ZuriHac2013Reg form].<br />
<br />
== Location ==<br />
[[File:ZurichMontage.jpg|300px|right]]<br />
<br />
'''Zurich, Switzerland'''<br />
<br />
To learn more about the city, please see the [http://en.wikipedia.org/wiki/Zurich '''Wikipedia'''] and [http://wikitravel.org/en/Zurich '''Wikitravel'''] articles.<br />
<br />
* The Zurich FP Afternoon will be hosted at [http://www.rauminfo.ethz.ch/Rauminfo/grundrissplan.gif?region=Z&areal=Z&gebaeude=CAB&geschoss=G&raumNr=61 ETH, building: CAB, room: G61], address: [https://maps.google.com/maps?q=cab+zurich&hl=en&ll=47.378151,8.548077&spn=0.001041,0.005845&sll=37.0625,-95.677068&sspn=84.226897,191.513672&hq=cab&hnear=Zurich,+Canton+of+Zurich,+Switzerland&t=m&fll=47.378178,8.548114&fspn=0.009212,0.023378&layer=c&cbll=47.378152,8.548077&panoid=p0nIrEwC3UaWPZmRJjLN6g&cbp=11,64.77,,0,0&z=19 Universitätstrasse 6, Zürich]. <br />
<br />
* ZuriHac will be hosted at the Erudify offices, [https://maps.google.ch/maps?q=Gr%C3%BCngasse+19,+Z%C3%BCrich&hl=en&ie=UTF8&ll=47.372947,8.525573&spn=0.008734,0.009559&sll=47.373386,8.524925&layer=c&cbp=13,222.55,,0,0.06&cbll=47.373504,8.525083&hnear=Gr%C3%BCngasse+19,+Kreis+4,+8004+Z%C3%BCrich&t=h&z=17&iwloc=A&panoid=vqb-ZHsYZ3d-SIhVYQeEoQ Grüngasse 19, Zürich].<br />
<br />
=== Getting around ===<br />
<br />
[https://maps.google.ch/maps/ms?msa=0&msid=215847268401510829939.0004decda4c3d2e76270f Google map with important places]<br />
<br />
Local transport links:<br />
<br />
http://www.zvv.ch/en/<br />
<br />
'''Getting to the FP Afternoon Talks on the 29th from the Airport'''<br />
<br />
Follow signs to the Tram 10 from the Airport arrivals.<br />
Take the Tram 10 direct to the stop "ETH/Universitätsspital" <br />
<br />
'''Getting to the Zurich Youth Hostel from the Airport'''<br />
<br />
Take any train that stops at Zurich Bahnhof Hardbrücke, transfer to the 33 Trolley bus going direction Morgental. Take 33 to Jugendherberge and you will see the Hostel.<br />
<br />
'''Getting from the Youth Hostel to the FP Afternoon Talks'''<br />
<br />
Walk to Morgental and take the number 7 Tram direction Bahnhof Stettbach. Change to the Number 10 or Number 6 Tram at the stop "Central" (direction Flughafen/Oerklion and Zoo) and get off at "ETH/Universitätsspital" <br />
<br />
'''A note on day tickets:'''<br />
<br />
Day tickets in Zurich run for 24 hours and can be used on all forms of transport, bus, train, tram.<br />
<br />
=== Accommodation ===<br />
<br />
We have spoken with the local Youth Hostel in Zurich and they will be able to group Haskellers together if you mention the code "ZuriHac2013" when booking and when you check in.<br />
<br />
The website to book is here http://www.youthhostel.ch/en/hostels/zurich <br />
<br />
'''Please be advised we do not have a hold on rooms so you should book sooner rather than later if you will attend! Erudify and the Youth Hostel can't guarantee space'''<br />
<br />
The Hostel has good public transport links to the Hackathon and downtown Zurich.<br />
<br />
Transport between the Hostel and Hackathon is very easy with the Trolley Bus 33.<br />
<br />
Other options we recommend are [http://www.wimdu.com/zurich Wimdu] or [https://www.airbnb.com/s/Zurich--Switzerland?checkin=08%2F29%2F2013&checkout=09%2F01%2F2013 Airbnb].<br />
<br />
== Schedule ==<br />
<br />
=== FP Afternoon ===<br />
<br />
<small><br />
{| border=1 style="border: 1px solid darkgray; border-collapse:collapse; " <br />
|-<br />
! Time !! Speaker !! Title !! Abstract !! Slides<br />
|- valign="top" valign="top" style="background: Chartreuse"<br />
| 13:00 || [[File:Zurihac2013.png|50px|top]] || Registration || Food and drinks provided by Google ||<br />
|- valign="top"<br />
| 13:30 || [[File:Simon_Marlow.jpg|50px|top]] Simon Marlow || '''Keynote:''' The Haxl Project at Facebook || Writing code in an environment as large and complex as Facebook involves talking to many different back-end services, including databases, search engines, caches, and so forth. Each of these data sources has different characteristics and requires different access patterns to make best use of its resources. Typical front-end code will need to access many of these resources concurrently, but the programmer doesn't want to be concerned with the details of how best to access each resource. Moreover, we want to be able to write our code in a modular way and yet have concurrent accesses to the back-end services automatically batched and overlapped for us.<br />
<br />
This talk describes a system that we're building using Haskell that allows the<br />
front-end programmer writing business logic to access all the back-end<br />
services in a concise and consistent way, while the system handles batching<br />
and overlapping of requests to multiple data sources behind the scenes. The<br />
programming model is one of implicit concurrency: there's no fork or async<br />
operation, all external data access is implicitly performed in parallel where<br />
possible.<br />
|| [https://github.com/meiersi/HaskellerZ/blob/master/meetups/20130829-FPAfternoon_The_Haxl_Project_at_Facebook/The%20Haxl%20Project%20at%20Facebook.pdf?raw=true Slides]<br />
|- valign="top" style="background: Chartreuse;"<br />
| 14:30 || ''Break'' || || Food and drinks provided by Google ||<br />
|- valign="top"<br />
| 15:00 ||[[File:Erik Hesselink.jpg|50px|top]]Erik Hesselink || Functional programming at [http://silkapp.com/ Silk]. || At Silk we've been using functional programming for about 4 years now. We've used it to build a web application, coding in Haskell and Javascript. I will explain what we do, how we do it, and what we've found to be the strengths and weaknesses of Haskell and Javascript.<br />
|| [https://github.com/meiersi/HaskellerZ/blob/master/meetups/20130829-FPAfternoon_Silk_Haskell_web_application_architecture/20130829-FPAfternoon_Silk_Haskell_web_application_architecture.pdf?raw=true Slides]<br />
|- valign="top"<br />
| 15:35 || [[File:Gergely_Risko.png|50px|top]]Gergely Risko || [https://github.com/errge/ceh Ceh], power-user environments to share || It's a common problem to share user environments (editor, compiler, browser, etc.) between GNU/Linux computers: laptop on the move and desktop at home, or different engineering workstations of a product team. This is usually solved by using the GNU/Linux distribution's package manager. That fails if the different engineers use different distributions or different versions. Ceh, building on Nix provides the same version controlled, reproducible power-user environment on top of any modern GNU/Linux, be it 64-bit or 32-bit. What makes it interesting for Haskellers is the fact that Nix applies the concept of purity and laziness on the filesystem level and package management level, and Ceh also has excellent GHC support with ~80 cabal packages included. ||[http://www.gergely.risko.hu/fpafternoon-zurich-20130829/ceh.html#(1) Slides]<br />
|- valign="top" style="background: Chartreuse;"<br />
| 16:10 || ''Break'' || || Food and drinks provided by Google ||<br />
|- valign="top"<br />
| 16:40 || [[File:Thomas_Schilling.jpg|50px|top]]Thomas Schilling || A [https://github.com/nominolo/lambdachine virtual machine] for Haskell<br />
|| The Glasgow Haskell Compiler is a very good static compiler, but the code it produces is often large and it can be difficult to predict performance.<br />
Furthermore, profiling a program often requires recompiling the program and<br />
all libraries it uses. This talk describes Lambdachine, a virtual machine and<br />
trace-based just-in-time (JIT) compiler for Haskell, which attempts to address<br />
these problems. Lambdachine reuses GHC for type checking and (optional)<br />
static optimisations, and complements it with additional optimisations<br />
performed at runtime based on the program's behaviour. This talk describes<br />
some of the challenges of the design and implementation of Lambdachine.<br />
|| [https://github.com/meiersi/HaskellerZ/blob/master/meetups/20130829-FPAfternoon_Lambdachine/20130829-FPAfternoon_Lambdachine.pdf?raw=true Slides]<br />
|- valign="top"<br />
| 17:15 || [[File:Luite_Stegeman.png|50px|top]]Luite Stegeman || Concurrent Haskell in the browser with [https://github.com/ghcjs/ghcjs GHCJS] || GHCJS is a Haskell to JavaScript compiler that supports many modern Haskell features, including lightweight threads, exceptions, Template Haskell and STM. Since It's based on GHC, we also get all recent type system extensions for free!<br />
<br />
In this talk I will explain how GHCJS hooks into the GHC pipeline to translate<br />
Haskell to JavaScript and discuss the challenges of compiling to a high level<br />
language. We will see how we can interact with JavaScript code from the<br />
Haskell world, in particular how GHCJS lets us avoid callback hell for HTTP<br />
requests and event handling in the browser.<br />
|| [https://github.com/meiersi/HaskellerZ/blob/master/meetups/20130829-FPAfternoon_GHCJS/20130829-FPAfternoon_GHCJS.pdf?raw=true Slides]<br />
|- valign="top" style="background: Chartreuse;"<br />
| 17:50 || ''Prizegiving'' || || Announcement of Google prizes ||<br />
|}<br />
</small><br />
<br />
=== ZuriHac ===<br />
<br />
==== Friday ====<br />
<br />
Hacking hours: 10:00 to 18:00.<br />
<br />
===== Introduction =====<br />
<br />
Please come before '''11:00'''. At 11:00 there will be projects introduction and discussion.<br />
<br />
===== BBQ =====<br />
<br />
Since the weather is lovely we'll go BBQing at Lake Zurich this afternoon! <br />
<br />
* The plan is to leave at 18:00.<br />
<br />
* We'll close the office at 18:00 so make sure you've got your stuff with you.<br />
<br />
* To make it easier we'll go in two groups:<br />
** Group A will be lead by Simon Meier.<br />
** Group B will be lead by Bas van Dijk.<br />
** We'll assemble the groups at around 17:45.<br />
<br />
* Everybody should bring their own food & drinks so we'll go shopping at: [https://maps.google.ch/maps?saddr=Gr%C3%BCngasse+19,+Z%C3%BCrich&daddr=Genossenschaft+Migros+Z%C3%BCrich,+Wengistrasse+7,+8004+Zurich&hl=en&ie=UTF8&ll=47.374273,8.524227&spn=0.002594,0.005681&sll=47.375134,8.523663&sspn=0.002594,0.005681&geocode=FUrc0gIdfRSCACnT_ovwGwqQRzGzmw-qajTgrg%3BFYfi0gIdLQ6CACnf-nNzGQqQRzFyoNByzNxPpg&oq=grun&gl=CH&dirflg=w&mra=ls&t=m&z=18 Migros at Wengistrasse 7] which is a 5 min. walk from ZuriHac.<br />
<br />
* Then we take the S8 train: [https://maps.google.ch/maps?saddr=Z%C3%BCrich,+Wiedikon+%4047.371469,8.523461&daddr=Wollishofen,+Zurich&hl=en&ie=UTF8&sll=47.359467,8.528566&sspn=0.041513,0.090895&geocode=Fc3U0gIdxQ6CAA%3BFVh40gIdEzaCACmRK9RF2AmQRzGqP7t2jjW0fQ&oq=wollis&gl=CH&dirflg=r&ttype=dep&date=08%2F30%2F13&time=18:40&noexp=0&noal=0&sort=def&mra=ls&t=m&z=14&start=0 from Wiedikon to Wollishofen] at 18:47.<br />
<br />
* Make sure to [http://www.zvv.ch/en/tickets/automatic-ticket-machine/index.html buy a ticket] because Swiss train conductors know no mercy. I suggest you buy a "Tageskarte" (which is a ticket for 24 hours) for zone 10.<br />
<br />
* The BBQ location is: [https://maps.google.ch/?ll=47.345842,8.536197&spn=0.001835,0.00284&t=h&z=19 in the park at the Bachstrasse near Lake Zurich].<br />
<br />
* If you like you can take a dive in the lake. The water is around 22°C. So make sure to pack a swimsuit and towel.<br />
<br />
==== Saturday ====<br />
<br />
Dinner: Pizza!<br />
<br />
* We'll order pizzas at the standard Erudify pizza place: Molino at Stauffacher.<br />
<br />
* Please [http://molino.ch/en/restaurants/zurich-stauffacher/food-beverages.html choose your order] (I can recommend Pizza Miss Italia)<br />
<br />
* Bas will come by and take your order and your money ;-)<br />
<br />
* The organizers will get the pizzas and we'll eat them at ZuriHac.<br />
<br />
==== Sunday ====<br />
<br />
===== Demoday =====<br />
* We would like to organize a Demo / Lightning-talk session at '''13:30''' today. <br />
<br />
* Please come to Bas if you would like to demo something or like to give a lightning talk.<br />
<br />
* Please keep your demo's/talks shorter than '''5 minutes'''.<br />
<br />
* Program:<br />
** Duncan Coutts: Lightning talk: "async I/O vs sync I/O" & "[http://new-new-hackage.haskell.org/ Hackage 2]".<br />
** Simon Meier: Demo: "Outlook on an improved binary serialization".<br />
** Simon Hengel: Demo: "Source locations for error / undefined / failing tests".<br />
** Patrick Premont: Talk: "[http://hackage.haskell.org/package/perdure Easily Persisting Large Immutable Data Structures]".<br />
** '''Break'''<br />
** Sjoerd Visscher: Demo: "[http://hackage.haskell.org/package/free-functors Free Functors]".<br />
** Roman Cheplyaka: Lightning talk: The status of the [https://github.com/haskell-suite Haskell Suite]<br />
** Erik Hesselink: Demo: "Halberd: automatically generating imports".<br />
** Mihaly Barasz: Demo: "SSTM, it's a thing!".<br />
** Gergely Risko: Demo: "[http://hackage.haskell.org/package/final the final library]".<br />
** Adam Bergmark: Talk: "[https://github.com/faylang/fay/wiki Fay]: status update".<br />
<br />
== Attendees ==<br />
See [[/Attendees|the list of people]] who are attending the FP Afternoon / ZuriHac 2013.<br />
<br />
== Projects ==<br />
See the [[/Projects|projects page]].<br />
<br />
== IRC, Twitter ==<br />
The main communication channel during the Hackathon will be our IRC channel: '''#zurihac''' at Freenode.<br />
<br />
'''#zurihac''' is our Twitter/Google+ hashtag as well.<br />
<br />
== Organizers ==<br />
The events are organized in name of the [http://www.meetup.com/HaskellerZ/ Zurich HaskellerZ meetup group] by the following people:<br />
<br />
* Alexander Bernauer (Google)<br />
* Thomas Schilling (Erudify)<br />
* Simon Meier (Erudify)<br />
* Michela D'Amelio (Erudify)<br />
* Dominic Small (Erudify)<br />
* Ales Pospisil (Erudify)<br />
* Bas van Dijk (Erudify)<br />
<br />
For any questions or emergencies, you can always call Bas ([[File:Bas_van_Dijk.png|50px]]) at +41 791 285 624 or send an email to zurihac@erudify.com<br />
<br />
[[Category:Community]]<br />
[[Category:Events]]<br />
[[Category:Hackathon]]</div>Sjoerd visscherhttps://wiki.haskell.org/ZuriHac2013ZuriHac20132013-09-01T14:01:15Z<p>Sjoerd visscher: </p>
<hr />
<div>[[Image:zurihac2013.png|right]]<br />
<br />
Zurich FP Afternoon:<br />
----<br />
{|<br />
|When:<br />
|Thursday, Aug 29th 2013<br />
|-<br />
|Hours:<br />
|13:00 ~ 18:00<br />
|-<br />
|Where:<br />
|ETH, Zurich, Switzerland<br />
|}<br />
----<br />
<br />
ZuriHac 2013:<br />
<br />
----<br />
{|<br />
|When:<br />
|Friday, Aug 30th 2013 – Sunday, Sep 1st 2013<br />
|-<br />
|Hours:<br />
|09:00 ~ 20:00<br />
|-<br />
|Where:<br />
|Erudify, Zurich, Switzerland<br />
|}<br />
----<br />
<br />
'''Important:'''<br><br />
Switzerland has [http://en.wikipedia.org/wiki/AC_power_plugs_and_sockets#Swiss_SEV_1011_.28Swiss_10.C2.A0A.2F250.C2.A0V.29.28Type_J.29 its own power sockets]. We can't provide converters for everybody so make sure to bring one along. Do note that the [http://en.wikipedia.org/wiki/AC_power_plugs_and_sockets#CEE_7.2F16_Europlug_.28Type_C.29 Europlug] will fit in a Swiss power socket. There's an electronics shop [https://maps.google.ch/maps?q=Fust+Center+Eschenmoser&hl=en&cid=6177809817081314569&gl=CH&t=m&z=16&iwloc=A Fust Center Eschenmoser] very near our office where you can buy converters.<br />
<br />
&nbsp;<br />
<br />
== About ==<br />
<br />
On Thursday, 29 August 2013 the Zurich HaskellerZ Meetup group will hold the "Zurich FP Afternoon". This will be a half-day event consisting of talks themed "Functional Programming in Industry". It will be held at ETH and will start with a keynote from Simon Marlow!<br />
<br />
The Zurich FP Afternoon is followed by ZuriHac 2013, a three day Haskell Hackathon from Friday, 30 August until Sunday, 1 September hosted at the Erudify offices.<br />
<br />
The Haskell Hackathon is an international, grassroots collaborative coding festival with a simple focus: build and improve Haskell libraries, tools, and infrastructure.<br />
<br />
This is a great opportunity to meet your fellow haskellers in real life,<br />
find new contributors for your project, improve existing libraries and tools or<br />
even start new ones!<br />
<br />
See [[ZuriHac]] for previous Hackathons in Zurich.<br />
<br />
== Sponsors ==<br />
http://www.erudify.com/assets/img/erudify-logo.png<br />
<br />
[https://erudify.com Erudify] will host the Hackathon.<br />
<br />
<br />
http://i.imgur.com/5cdqsFU.png<br />
<br />
[http://www.google.com/about/jobs/locations/zurich/ Google Switzerland] are providing financial and food support<br />
<br />
[[Image:ETH.png|450px]]<br />
<br />
[http://eth.ch ETH] will host the Zurich FP Afternoon.<br />
<br />
== News ==<br />
;19 August 2013<br />
:[http://www.google.com/about/jobs/locations/zurich/ Google Switzerland] is an official co-sponsor of ZuriHac 2013.<br> This enables us to give all attendees this free T-shirt:<br> [[Image:T_Shirt_ZuriHac_2013_front_1.jpg|250px]][[Image:T_Shirt_ZuriHac_2013_back_1.jpg|250px]]<br> and free food and drinks during the FP Afternoon!<br> Thanks Google!<br />
<br />
;24 July 2013<br />
:Completed [[ZuriHac2013#Schedule|speakers schedule]] for the FP Afternoon.<br />
<br />
;10 June 2013<br />
:[http://bit.ly/ZuriHac2013Reg Registration] is now open!<br />
<br />
== Registration ==<br />
To register please fill in the [http://bit.ly/ZuriHac2013Reg form].<br />
<br />
== Location ==<br />
[[File:ZurichMontage.jpg|300px|right]]<br />
<br />
'''Zurich, Switzerland'''<br />
<br />
To learn more about the city, please see the [http://en.wikipedia.org/wiki/Zurich '''Wikipedia'''] and [http://wikitravel.org/en/Zurich '''Wikitravel'''] articles.<br />
<br />
* The Zurich FP Afternoon will be hosted at [http://www.rauminfo.ethz.ch/Rauminfo/grundrissplan.gif?region=Z&areal=Z&gebaeude=CAB&geschoss=G&raumNr=61 ETH, building: CAB, room: G61], address: [https://maps.google.com/maps?q=cab+zurich&hl=en&ll=47.378151,8.548077&spn=0.001041,0.005845&sll=37.0625,-95.677068&sspn=84.226897,191.513672&hq=cab&hnear=Zurich,+Canton+of+Zurich,+Switzerland&t=m&fll=47.378178,8.548114&fspn=0.009212,0.023378&layer=c&cbll=47.378152,8.548077&panoid=p0nIrEwC3UaWPZmRJjLN6g&cbp=11,64.77,,0,0&z=19 Universitätstrasse 6, Zürich]. <br />
<br />
* ZuriHac will be hosted at the Erudify offices, [https://maps.google.ch/maps?q=Gr%C3%BCngasse+19,+Z%C3%BCrich&hl=en&ie=UTF8&ll=47.372947,8.525573&spn=0.008734,0.009559&sll=47.373386,8.524925&layer=c&cbp=13,222.55,,0,0.06&cbll=47.373504,8.525083&hnear=Gr%C3%BCngasse+19,+Kreis+4,+8004+Z%C3%BCrich&t=h&z=17&iwloc=A&panoid=vqb-ZHsYZ3d-SIhVYQeEoQ Grüngasse 19, Zürich].<br />
<br />
=== Getting around ===<br />
<br />
[https://maps.google.ch/maps/ms?msa=0&msid=215847268401510829939.0004decda4c3d2e76270f Google map with important places]<br />
<br />
Local transport links:<br />
<br />
http://www.zvv.ch/en/<br />
<br />
'''Getting to the FP Afternoon Talks on the 29th from the Airport'''<br />
<br />
Follow signs to the Tram 10 from the Airport arrivals.<br />
Take the Tram 10 direct to the stop "ETH/Universitätsspital" <br />
<br />
'''Getting to the Zurich Youth Hostel from the Airport'''<br />
<br />
Take any train that stops at Zurich Bahnhof Hardbrücke, transfer to the 33 Trolley bus going direction Morgental. Take 33 to Jugendherberge and you will see the Hostel.<br />
<br />
'''Getting from the Youth Hostel to the FP Afternoon Talks'''<br />
<br />
Walk to Morgental and take the number 7 Tram direction Bahnhof Stettbach. Change to the Number 10 or Number 6 Tram at the stop "Central" (direction Flughafen/Oerklion and Zoo) and get off at "ETH/Universitätsspital" <br />
<br />
'''A note on day tickets:'''<br />
<br />
Day tickets in Zurich run for 24 hours and can be used on all forms of transport, bus, train, tram.<br />
<br />
=== Accommodation ===<br />
<br />
We have spoken with the local Youth Hostel in Zurich and they will be able to group Haskellers together if you mention the code "ZuriHac2013" when booking and when you check in.<br />
<br />
The website to book is here http://www.youthhostel.ch/en/hostels/zurich <br />
<br />
'''Please be advised we do not have a hold on rooms so you should book sooner rather than later if you will attend! Erudify and the Youth Hostel can't guarantee space'''<br />
<br />
The Hostel has good public transport links to the Hackathon and downtown Zurich.<br />
<br />
Transport between the Hostel and Hackathon is very easy with the Trolley Bus 33.<br />
<br />
Other options we recommend are [http://www.wimdu.com/zurich Wimdu] or [https://www.airbnb.com/s/Zurich--Switzerland?checkin=08%2F29%2F2013&checkout=09%2F01%2F2013 Airbnb].<br />
<br />
== Schedule ==<br />
<br />
=== FP Afternoon ===<br />
<br />
<small><br />
{| border=1 style="border: 1px solid darkgray; border-collapse:collapse; " <br />
|-<br />
! Time !! Speaker !! Title !! Abstract !! Slides<br />
|- valign="top" valign="top" style="background: Chartreuse"<br />
| 13:00 || [[File:Zurihac2013.png|50px|top]] || Registration || Food and drinks provided by Google ||<br />
|- valign="top"<br />
| 13:30 || [[File:Simon_Marlow.jpg|50px|top]] Simon Marlow || '''Keynote:''' The Haxl Project at Facebook || Writing code in an environment as large and complex as Facebook involves talking to many different back-end services, including databases, search engines, caches, and so forth. Each of these data sources has different characteristics and requires different access patterns to make best use of its resources. Typical front-end code will need to access many of these resources concurrently, but the programmer doesn't want to be concerned with the details of how best to access each resource. Moreover, we want to be able to write our code in a modular way and yet have concurrent accesses to the back-end services automatically batched and overlapped for us.<br />
<br />
This talk describes a system that we're building using Haskell that allows the<br />
front-end programmer writing business logic to access all the back-end<br />
services in a concise and consistent way, while the system handles batching<br />
and overlapping of requests to multiple data sources behind the scenes. The<br />
programming model is one of implicit concurrency: there's no fork or async<br />
operation, all external data access is implicitly performed in parallel where<br />
possible.<br />
|| [https://github.com/meiersi/HaskellerZ/blob/master/meetups/20130829-FPAfternoon_The_Haxl_Project_at_Facebook/The%20Haxl%20Project%20at%20Facebook.pdf?raw=true Slides]<br />
|- valign="top" style="background: Chartreuse;"<br />
| 14:30 || ''Break'' || || Food and drinks provided by Google ||<br />
|- valign="top"<br />
| 15:00 ||[[File:Erik Hesselink.jpg|50px|top]]Erik Hesselink || Functional programming at [http://silkapp.com/ Silk]. || At Silk we've been using functional programming for about 4 years now. We've used it to build a web application, coding in Haskell and Javascript. I will explain what we do, how we do it, and what we've found to be the strengths and weaknesses of Haskell and Javascript.<br />
|| [https://github.com/meiersi/HaskellerZ/blob/master/meetups/20130829-FPAfternoon_Silk_Haskell_web_application_architecture/20130829-FPAfternoon_Silk_Haskell_web_application_architecture.pdf?raw=true Slides]<br />
|- valign="top"<br />
| 15:35 || [[File:Gergely_Risko.png|50px|top]]Gergely Risko || [https://github.com/errge/ceh Ceh], power-user environments to share || It's a common problem to share user environments (editor, compiler, browser, etc.) between GNU/Linux computers: laptop on the move and desktop at home, or different engineering workstations of a product team. This is usually solved by using the GNU/Linux distribution's package manager. That fails if the different engineers use different distributions or different versions. Ceh, building on Nix provides the same version controlled, reproducible power-user environment on top of any modern GNU/Linux, be it 64-bit or 32-bit. What makes it interesting for Haskellers is the fact that Nix applies the concept of purity and laziness on the filesystem level and package management level, and Ceh also has excellent GHC support with ~80 cabal packages included. ||[http://www.gergely.risko.hu/fpafternoon-zurich-20130829/ceh.html#(1) Slides]<br />
|- valign="top" style="background: Chartreuse;"<br />
| 16:10 || ''Break'' || || Food and drinks provided by Google ||<br />
|- valign="top"<br />
| 16:40 || [[File:Thomas_Schilling.jpg|50px|top]]Thomas Schilling || A [https://github.com/nominolo/lambdachine virtual machine] for Haskell<br />
|| The Glasgow Haskell Compiler is a very good static compiler, but the code it produces is often large and it can be difficult to predict performance.<br />
Furthermore, profiling a program often requires recompiling the program and<br />
all libraries it uses. This talk describes Lambdachine, a virtual machine and<br />
trace-based just-in-time (JIT) compiler for Haskell, which attempts to address<br />
these problems. Lambdachine reuses GHC for type checking and (optional)<br />
static optimisations, and complements it with additional optimisations<br />
performed at runtime based on the program's behaviour. This talk describes<br />
some of the challenges of the design and implementation of Lambdachine.<br />
|| [https://github.com/meiersi/HaskellerZ/blob/master/meetups/20130829-FPAfternoon_Lambdachine/20130829-FPAfternoon_Lambdachine.pdf?raw=true Slides]<br />
|- valign="top"<br />
| 17:15 || [[File:Luite_Stegeman.png|50px|top]]Luite Stegeman || Concurrent Haskell in the browser with [https://github.com/ghcjs/ghcjs GHCJS] || GHCJS is a Haskell to JavaScript compiler that supports many modern Haskell features, including lightweight threads, exceptions, Template Haskell and STM. Since It's based on GHC, we also get all recent type system extensions for free!<br />
<br />
In this talk I will explain how GHCJS hooks into the GHC pipeline to translate<br />
Haskell to JavaScript and discuss the challenges of compiling to a high level<br />
language. We will see how we can interact with JavaScript code from the<br />
Haskell world, in particular how GHCJS lets us avoid callback hell for HTTP<br />
requests and event handling in the browser.<br />
|| [https://github.com/meiersi/HaskellerZ/blob/master/meetups/20130829-FPAfternoon_GHCJS/20130829-FPAfternoon_GHCJS.pdf?raw=true Slides]<br />
|- valign="top" style="background: Chartreuse;"<br />
| 17:50 || ''Prizegiving'' || || Announcement of Google prizes ||<br />
|}<br />
</small><br />
<br />
=== ZuriHac ===<br />
<br />
==== Friday ====<br />
<br />
Hacking hours: 10:00 to 18:00.<br />
<br />
===== Introduction =====<br />
<br />
Please come before '''11:00'''. At 11:00 there will be projects introduction and discussion.<br />
<br />
===== BBQ =====<br />
<br />
Since the weather is lovely we'll go BBQing at Lake Zurich this afternoon! <br />
<br />
* The plan is to leave at 18:00.<br />
<br />
* We'll close the office at 18:00 so make sure you've got your stuff with you.<br />
<br />
* To make it easier we'll go in two groups:<br />
** Group A will be lead by Simon Meier.<br />
** Group B will be lead by Bas van Dijk.<br />
** We'll assemble the groups at around 17:45.<br />
<br />
* Everybody should bring their own food & drinks so we'll go shopping at: [https://maps.google.ch/maps?saddr=Gr%C3%BCngasse+19,+Z%C3%BCrich&daddr=Genossenschaft+Migros+Z%C3%BCrich,+Wengistrasse+7,+8004+Zurich&hl=en&ie=UTF8&ll=47.374273,8.524227&spn=0.002594,0.005681&sll=47.375134,8.523663&sspn=0.002594,0.005681&geocode=FUrc0gIdfRSCACnT_ovwGwqQRzGzmw-qajTgrg%3BFYfi0gIdLQ6CACnf-nNzGQqQRzFyoNByzNxPpg&oq=grun&gl=CH&dirflg=w&mra=ls&t=m&z=18 Migros at Wengistrasse 7] which is a 5 min. walk from ZuriHac.<br />
<br />
* Then we take the S8 train: [https://maps.google.ch/maps?saddr=Z%C3%BCrich,+Wiedikon+%4047.371469,8.523461&daddr=Wollishofen,+Zurich&hl=en&ie=UTF8&sll=47.359467,8.528566&sspn=0.041513,0.090895&geocode=Fc3U0gIdxQ6CAA%3BFVh40gIdEzaCACmRK9RF2AmQRzGqP7t2jjW0fQ&oq=wollis&gl=CH&dirflg=r&ttype=dep&date=08%2F30%2F13&time=18:40&noexp=0&noal=0&sort=def&mra=ls&t=m&z=14&start=0 from Wiedikon to Wollishofen] at 18:47.<br />
<br />
* Make sure to [http://www.zvv.ch/en/tickets/automatic-ticket-machine/index.html buy a ticket] because Swiss train conductors know no mercy. I suggest you buy a "Tageskarte" (which is a ticket for 24 hours) for zone 10.<br />
<br />
* The BBQ location is: [https://maps.google.ch/?ll=47.345842,8.536197&spn=0.001835,0.00284&t=h&z=19 in the park at the Bachstrasse near Lake Zurich].<br />
<br />
* If you like you can take a dive in the lake. The water is around 22°C. So make sure to pack a swimsuit and towel.<br />
<br />
==== Saturday ====<br />
<br />
Dinner: Pizza!<br />
<br />
* We'll order pizzas at the standard Erudify pizza place: Molino at Stauffacher.<br />
<br />
* Please [http://molino.ch/en/restaurants/zurich-stauffacher/food-beverages.html choose your order] (I can recommend Pizza Miss Italia)<br />
<br />
* Bas will come by and take your order and your money ;-)<br />
<br />
* The organizers will get the pizzas and we'll eat them at ZuriHac.<br />
<br />
==== Sunday ====<br />
<br />
===== Demoday =====<br />
* We would like to organize a Demo / Lightning-talk session at '''13:30''' today. <br />
<br />
* Please come to Bas if you would like to demo something or like to give a lightning talk.<br />
<br />
* Please keep your demo's/talks shorter than '''5 minutes'''.<br />
<br />
* Program:<br />
** Duncan Coutts: Lightning talk: "async I/O vs sync I/O" & "Hackage 2".<br />
** Simon Meier: Demo: "Outlook on an improved binary serialization".<br />
** Simon Hengel: Demo: "Source locations for error / undefined / failing tests".<br />
** Patrick Premont: Talk: "Easily Persisting Large Immutable Data Structures".<br />
** '''Break'''<br />
** Sjoerd Visscher: Demo: "[http://hackage.haskell.org/package/free-functors Free Functors]".<br />
** Roman Cheplyaka: Lightning talk: The status of the Haskell Suite<br />
** Erik Hesselink: Demo: "Halberd: automatically generating imports".<br />
** Mihaly Barasz: Demo: "SSTM, it's a thing!".<br />
** Gergely Risko: Demo: "the final library".<br />
** Adam Bergmark: Talk: "Fay: status update".<br />
<br />
== Attendees ==<br />
See [[/Attendees|the list of people]] who are attending the FP Afternoon / ZuriHac 2013.<br />
<br />
== Projects ==<br />
See the [[/Projects|projects page]].<br />
<br />
== IRC, Twitter ==<br />
The main communication channel during the Hackathon will be our IRC channel: '''#zurihac''' at Freenode.<br />
<br />
'''#zurihac''' is our Twitter/Google+ hashtag as well.<br />
<br />
== Organizers ==<br />
The events are organized in name of the [http://www.meetup.com/HaskellerZ/ Zurich HaskellerZ meetup group] by the following people:<br />
<br />
* Alexander Bernauer (Google)<br />
* Thomas Schilling (Erudify)<br />
* Simon Meier (Erudify)<br />
* Michela D'Amelio (Erudify)<br />
* Dominic Small (Erudify)<br />
* Ales Pospisil (Erudify)<br />
* Bas van Dijk (Erudify)<br />
<br />
For any questions or emergencies, you can always call Bas ([[File:Bas_van_Dijk.png|50px]]) at +41 791 285 624 or send an email to zurihac@erudify.com<br />
<br />
[[Category:Community]]<br />
[[Category:Events]]<br />
[[Category:Hackathon]]</div>Sjoerd visscherhttps://wiki.haskell.org/ListT_done_rightListT done right2012-08-26T12:59:39Z<p>Sjoerd visscher: /* Grouping effects */ Fixed link</p>
<hr />
<div>== Introduction ==<br />
<br />
The Haskell hierarchical libraries implement a ListT monad transformer. There are, however, some problems with that implementation.<br />
<br />
* <hask>ListT</hask> imposes unnecessary strictness.<br />
* <hask>ListT</hask> isn't really a monad transformer, ie. <hask>ListT m</hask> isn't always a monad for a monad <hask>m</hask>.<br />
<br />
See the [[#Examples]] below for demonstrations of these problems.<br />
<br />
== Implementation ==<br />
<br />
The following implementation tries to provide a replacement for the ListT transformer using the following technique. Instead of associating a monadic side effect with a list of values (<hask>m [a]</hask>), it lets each element of the list have its own side effects, which only get `excecuted' if this element of the list is really inspected.<br />
<br />
There is also a [[ListT done right alternative]].<br />
<br />
<haskell><br />
import Data.Maybe<br />
import Control.Monad.State<br />
import Control.Monad.Reader<br />
import Control.Monad.Error<br />
import Control.Monad.Cont<br />
<br />
-- The monadic list type<br />
data MList' m a = MNil | a `MCons` MList m a<br />
type MList m a = m (MList' m a)<br />
<br />
-- This can be directly used as a monad transformer<br />
newtype ListT m a = ListT { runListT :: MList m a }<br />
<br />
-- A "lazy" run function, which only calculates the first solution.<br />
runListT' :: Functor m => ListT m a -> m (Maybe (a, ListT m a))<br />
runListT' (ListT m) = fmap g m where<br />
g MNil = Nothing<br />
g (x `MCons` xs) = Just (x, ListT xs)<br />
<br />
-- In ListT from Control.Monad this one is the data constructor ListT, so sadly, this code can't be a drop-in replacement.<br />
liftList :: Monad m => [a] -> ListT m a<br />
liftList [] = ListT $ return MNil<br />
liftList (x:xs) = ListT . return $ x `MCons` (runListT $ liftList xs)<br />
<br />
instance Functor m => Functor (ListT m) where<br />
fmap f (ListT m) = ListT $ fmap (fmap f) m<br />
<br />
instance Functor m => Functor (MList' m) where <br />
fmap _ MNil = MNil<br />
fmap f (x `MCons` xs) = f x `MCons` fmap (fmap f) xs<br />
<br />
-- Why on earth isn't Monad declared `class Functor m => Monad m'?<br />
-- I assume that a monad is always a functor, so the contexts <br />
-- get a little larger than actually necessary<br />
instance (Functor m, Monad m) => Monad (ListT m) where<br />
return x = ListT . return $ x `MCons` return MNil<br />
m >>= f = joinListT $ fmap f m<br />
<br />
instance MonadTrans ListT where<br />
lift = ListT . liftM (`MCons` return MNil)<br />
<br />
instance (Functor m, Monad m) => MonadPlus (ListT m) where<br />
mzero = liftList []<br />
(ListT xs) `mplus` (ListT ys) = ListT $ xs `mAppend` ys<br />
<br />
-- Implemenation of join<br />
joinListT :: (Functor m, Monad m) => ListT m (ListT m a) -> ListT m a<br />
joinListT (ListT xss) = ListT . joinMList $ fmap (fmap runListT) xss<br />
<br />
joinMList :: (Functor m, Monad m) => MList m (MList m a) -> MList m a<br />
joinMList = (=<<) joinMList'<br />
<br />
joinMList' :: (Functor m, Monad m) => MList' m (MList m a) -> MList m a<br />
joinMList' MNil = return MNil<br />
joinMList' (x `MCons` xs) = x `mAppend` joinMList xs<br />
<br />
mAppend :: (Functor m, Monad m) => MList m a -> MList m a -> MList m a<br />
mAppend xs ys = (`mAppend'` ys) =<< xs<br />
<br />
mAppend' :: (Functor m, Monad m) => MList' m a -> MList m a -> MList m a<br />
mAppend' MNil ys = ys<br />
mAppend' (x `MCons` xs) ys = return $ x `MCons` mAppend xs ys<br />
<br />
-- These things typecheck, but I haven't made sure what they do is sensible.<br />
-- (callCC almost certainly has to be changed in the same way as throwError)<br />
instance (MonadIO m, Functor m) => MonadIO (ListT m) where<br />
liftIO = lift . liftIO<br />
<br />
instance (MonadReader s m, Functor m) => MonadReader s (ListT m) where<br />
ask = lift ask<br />
local f = ListT . local f . runListT<br />
<br />
instance (MonadState s m, Functor m) => MonadState s (ListT m) where<br />
get = lift get<br />
put = lift . put<br />
<br />
instance (MonadCont m, Functor m) => MonadCont (ListT m) where<br />
callCC f = ListT $<br />
callCC $ \c -><br />
runListT . f $ \a -> <br />
ListT . c $ a `MCons` return MNil<br />
<br />
instance (MonadError e m, Functor m) => MonadError e (ListT m) where<br />
throwError = lift . throwError<br />
{- This (perhaps more straightforward) implementation has the disadvantage<br />
that it only catches errors that occur at the first position of the <br />
list.<br />
m `catchError` h = ListT $ runListT m `catchError` \e -> runListT (h e)<br />
-}<br />
-- This is better because errors are caught everywhere in the list.<br />
(m :: ListT m a) `catchError` h = ListT . deepCatch . runListT $ m <br />
where<br />
deepCatch :: MList m a -> MList m a<br />
deepCatch ml = fmap deepCatch' ml `catchError` \e -> runListT (h e)<br />
<br />
deepCatch' :: MList' m a -> MList' m a<br />
deepCatch' MNil = MNil <br />
deepCatch' (x `MCons` xs) = x `MCons` deepCatch xs<br />
</haskell><br />
<br />
== Examples ==<br />
<br />
Here are some examples that show why the old ListT is not right, and how to use the new ListT instead.<br />
<br />
=== Sum of squares ===<br />
<br />
Here's a silly example how to use ListT. It checks if an <hask>Int</hask> <hask>n</hask> is a sum of two squares. Each inspected possibility is printed, and if the number is indeed a sum of squares, another message is printed. Note that with our ListT, runMyTest only evaluates the side effects needed to find the first representation of <hask>n</hask> as a sum of squares, which would be impossible with the ListT implementation of <hask>Control.Monad.List.ListT</hask>.<br />
<br />
<haskell><br />
myTest :: Int -> ListT IO (Int, Int)<br />
myTest n = do<br />
let squares = liftList . takeWhile (<=n) $ map (^(2::Int)) [0..]<br />
x <- squares<br />
y <- squares<br />
lift $ print (x,y)<br />
guard $ x + y == n<br />
lift $ putStrLn "Sum of squares."<br />
return (x,y)<br />
<br />
runMyTest :: Int -> IO (Int, Int) <br />
runMyTest = fmap (fst . fromJust) . runListT' . myTest<br />
</haskell><br />
<br />
A little example session (<hask>runMyTest'</hask> is implemented in exactly the same way as <hask>runMyTest</hask>, but uses <hask>Control.Monad.List.ListT</hask>):<br />
<br />
*Main> runMyTest 5<br />
(0,0)<br />
(0,1)<br />
(0,4)<br />
(1,0)<br />
(1,1)<br />
(1,4)<br />
Sum of squares.<br />
*Main> runMyTest' 5<br />
(0,0)<br />
(0,1)<br />
(0,4)<br />
(1,0)<br />
(1,1)<br />
(1,4)<br />
Sum of squares.<br />
(4,0)<br />
(4,1)<br />
Sum of squares.<br />
(4,4)<br />
<br />
=== Grouping effects ===<br />
<br />
I didn't understand the statement "<hask>ListT m</hask> isn't always a monad", even<br />
after I understood why it is too strict. I found the answer in<br />
[http://web.cecs.pdx.edu/~mpj/pubs/composing.html Composing Monads]. It's in<br />
fact a direct consequence of the unnecessary strictness. <hask>ListT m</hask> is<br />
not associative (which is one of the monad laws), because grouping affects<br />
when side effects are run (which may in turn affect the answers). Consider<br />
<br />
<haskell><br />
import Control.Monad.List<br />
import Data.IORef<br />
<br />
test1 :: ListT IO Int<br />
test1 = do<br />
r <- liftIO (newIORef 0)<br />
(next r `mplus` next r >> next r `mplus` next r) >> next r `mplus` next r<br />
<br />
test2 :: ListT IO Int<br />
test2 = do<br />
r <- liftIO (newIORef 0)<br />
next r `mplus` next r >> (next r `mplus` next r >> next r `mplus` next r)<br />
<br />
next :: IORef Int -> ListT IO Int<br />
next r = liftIO $ do x <- readIORef r<br />
writeIORef r (x+1)<br />
return x<br />
</haskell><br />
<br />
Under Control.Monad.List.ListT, test1 returns the answers<br />
<hask>[6,7,8,9,10,11,12,13]</hask> while test2 returns the answers<br />
<hask>[4,5,6,7,10,11,12,13]</hask>. Under the above ListT (if all answers are forced), both return<br />
<hask>[2,3,5,6,9,10,12,13]</hask>.<br />
<br />
[[Andrew Pimlott]]<br />
<br />
=== Order of printing ===<br />
<br />
Here is another (simpler?) example showing why "<hask>ListT m</hask> isn't always a monad".<br />
<br />
<haskell><br />
a,b,c :: ListT IO ()<br />
[a,b,c] = map (liftIO . putChar) ['a','b','c']<br />
<br />
t1 :: ListT IO ()<br />
t1 = ((a `mplus` a) >> b) >> c<br />
<br />
t2 :: ListT IO ()<br />
t2 = (a `mplus` a) >> (b >> c)<br />
</haskell><br />
<br />
Under <hask>Control.Monad.List.ListT</hask>, running <hask>runListT t1</hask> prints "aabbcc", while <hask>runListT t2</hask> instead prints "aabcbc". Under the above ListT, they both print "abc" (if all answers were forced, they would print "abcabc").<br />
<br />
[[Roberto Zunino]]<br />
<br />
== Relation to Nondet ==<br />
<br />
NonDeterminism describes another monad transformer that can also be used to model nondeterminism. In fact, <hask>ListT</hask> and <hask>NondetT</hask> are quite similar with the following two functions translating between them<br />
<br />
<haskell><br />
toListT :: (Monad m) => NondetT m a -> ListT m a<br />
toListT (NondetT fold) = ListT $ fold ((return.) . MCons) (return MNil)<br />
<br />
toNondetT :: (Monad m) => ListT m a -> NondetT m a<br />
toNondetT (ListT ml) = NondetT (\c n -> fold c n ml) where<br />
fold :: Monad m => (a -> m b -> m b) -> m b -> MList m a -> m b<br />
fold c n xs = fold' c n =<< xs<br />
<br />
fold' :: Monad m => (a -> m b -> m b) -> m b -> MList' m a -> m b<br />
fold' _ n MNil = n<br />
fold' c n (x `MCons` xs) = c x (fold c n xs)<br />
</haskell><br />
<br />
<hask>ListT</hask> is smaller than <hask>NondetT</hask> in the sense that <hask>toListT . toNondetT</hask> is the identity (is it ok to call <hask>ListT</hask> `retract'?). However, these functions don't define an isomorphism (check for example <hask>NondetT (\_ n -> liftM2 const n n)</hask>).<br />
<br />
[[Thomas Jaeger]]<br />
<br />
''I propose to replace every occurence of `fmap` in the above code with `liftM`, thereby moving `class Functor` and the complaint about it not being a superclass of `Monad` completely out of the picture. I'd simply do it, if there wasn't this feeling that I have overlooked something obvious. What is it? -- [[Udo Stenzel]]''<br />
<br />
There's no particular reason why I used fmap, except that the page has the (unfortunate!) title "ListT Done Right", and having Functor superclass of Monad certainly is the right thing. But I agree, that mistake has long been done and I feel my half-hearted cure is worse than the disease. You can find an alternative, more concise definition of a ListT transformer based on even-style lists here: [[ListT done right alternative]]<br />
<br />
[[amb]] has AmbT, which could be considered as 'ListT done right' (since Amb is identical to the list monad).<br />
<br />
[[Category:Monad]]<br />
[[Category:Proposals]]</div>Sjoerd visscherhttps://wiki.haskell.org/JMacroJMacro2012-05-21T10:15:25Z<p>Sjoerd visscher: Redirecting to Jmacro</p>
<hr />
<div>#REDIRECT [[Jmacro]]</div>Sjoerd visscherhttps://wiki.haskell.org/DHD_UHac/AttendeesDHD UHac/Attendees2012-02-14T18:32:47Z<p>Sjoerd visscher: </p>
<hr />
<div>This is a list of attendees for [[DHD_UHac|DHD >>= UHac]].<br />
<br />
If you have [[DHD_UHac/Register|registered]], please consider adding yourself to the list. Your contact and travel information may help with coordination between participants.<br />
<br />
If you live around Utrecht or plan to commute from home each day, you may put "Local" for accommodation.<br />
<br />
{| class="wikitable"<br />
! Nickname<br />
! Real Name (Affl)<br />
! Mobile #<br />
! Arrive<br />
! Depart<br />
! Accommodation<br />
|-<br />
| leather<br />
| Sean Leather (UU)<br />
| +31616158163<br />
|<br />
|<br />
| Local<br />
|-<br />
| norm2782<br />
| Jurriën Stutterheim (UU)<br />
| +31642392944<br />
|<br />
|<br />
| Local<br />
|-<br />
| ruud<br />
| Ruud Koot (UU)<br />
| +31623024223<br />
|<br />
|<br />
| Local<br />
|-<br />
| kosmikus<br />
| Andres Löh (Well-Typed LLP)<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| sol<br />
| Simon Hengel<br />
| +4917661064074<br />
|<br />
|<br />
|<br />
|-<br />
| dreixel<br />
| José Pedro Magalhães (UU)<br />
| +31650459029<br />
|<br />
|<br />
| Local<br />
|-<br />
| marczoid<br />
| Marc van Zee (UU)<br />
| +31633610518<br />
|<br />
|<br />
| Local<br />
|-<br />
| paba<br />
| Patrick Bahr (University of Copenhagen)<br />
|<br />
|<br />
|<br />
| Local<br />
|-<br />
| toothbrush<br />
| Paul van der Walt (UU)<br />
| +31614681351<br />
|<br />
|<br />
| Local<br />
|-<br />
| spockz<br />
| Alessandro Vermeulen (UU)<br />
| +31646165747<br />
|<br />
|<br />
| Local<br />
|-<br />
| wlad<br />
| Vlad Hanciuta<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| gcollins<br />
| Gregory Collins (Google)<br />
| +41 79 441 6832<br />
|<br />
|<br />
| Karel V Hotel<br />
|-<br />
| <br />
| Pascal Hof<br />
| <br />
|<br />
|<br />
| <br />
|-<br />
| jaspervdj<br />
| Jasper Van der Jeugt<br />
| +32 476 26 48 47<br />
|<br />
|<br />
| Yet undecided<br />
|-<br />
| cameleon<br />
| Erik Hesselink<br />
| +31 6 50 994 887<br />
|<br />
|<br />
| Local<br />
|-<br />
| sjoerd_visscher<br />
| Sjoerd Visscher<br />
| +31 6 1508 4368<br />
|<br />
|<br />
| Local<br />
|}</div>Sjoerd visscherhttps://wiki.haskell.org/Research_papers/Functional_pearlsResearch papers/Functional pearls2011-09-16T10:36:59Z<p>Sjoerd visscher: Online version of Linear lambda calculus and PTIME-completeness</p>
<hr />
<div>Functional pearls are elegant, instructive examples of functional programming. They are supposed to be fun, and they teach important programming techniques and fundamental design principles. They traditionally appear in [http://journals.cambridge.org/action/displayJournal?jid=JFP The Journal of Functional Programming], and at [http://www.icfpconference.org/index.html ICFP] and affiliated workshops.<br />
<br />
The history of functional pearls is covered by:<br />
<br />
;[http://icfp06.cs.uchicago.edu/bird-talk.pdf How to Write a Functional Pearl]<br />
:Richard Bird. ICFP 2006.<br />
<br />
;[http://portal.acm.org/ft_gateway.cfm?id=1159832&type=pdf&coll=&dl=ACM&CFID=15151515&CFTOKEN=6184618 Fifteen years of functional pearls]<br />
:Richard Bird. ICFP 2006.<br />
<br />
;[http://spivey.oriel.ox.ac.uk/mike/firstpearl.pdf Strachey's functional pearl, forty years on]<br />
:Mike Spivey, 2006.<br />
<br />
;[http://www.brics.dk/RS/07/14/index.html On Barron and Strachey's Cartesian Product Function]<br />
: Olivier Danvy and Michael Spivey, July 2007<br />
<br />
There have been many functional pearls in JFP, and some others at<br />
ICFP and the Haskell Workshop. There is also a collection of them in<br />
[http://web2.comlab.ox.ac.uk/oucl/publications/books/fop/ The Fun of Programming].<br />
<br />
The pearls tend to concentrate on:<br />
<br />
* Examples of program calculation and proof<br />
* Neat presentations of new or old data structures<br />
* Interesting applications and techniques<br />
<br />
Some advice on writing pearls for JFP is available in this [http://www.comlab.ox.ac.uk/people/Jeremy.Gibbons/pearls/ editorial].<br />
<br />
=== Online ===<br />
<br />
Functional pearls online:<br />
<br />
;[http://research.microsoft.com/en-us/people/dimitris/every-bit-counts.pdf Every Bit Counts]<br />
:Dimitrios Vytiniotis, Andrew Kennedy. 2010.<br />
<br />
;[http://www.iai.uni-bonn.de/~jv/icfp10.pdf Combining Syntactic and Semantic Bidirectionalization]<br />
:Janis Voigtländer, Zhenjiang Hu, Kazutaka Matsuda, Meng Wang. 2010.<br />
<br />
;[http://wwwtcs.inf.tu-dresden.de/~voigt/icfp09.pdf Free Theorems Involving Type Constructor Classes]<br />
:Janis Voigtländer. 2009.<br />
<br />
;[http://www.cs.kent.ac.uk/pubs/2009/2847/content.pdf Linear, Bounded, Functional Pretty-Printing]<br />
:S. Doaitse Swierstra, Olaf Chitil. 2009.<br />
<br />
;[http://wwwtcs.inf.tu-dresden.de/~voigt/popl09-2.pdf Bidirectionalization for Free!]<br />
:Janis Voigtländer. 2009.<br />
<br />
;[http://www.cs.ox.ac.uk/ralf.hinze/publications/ICFP08.pdf Functional Pearl: Streams and Unique Fixed Points]<br />
:Ralf Hinze, ICFP 2008<br />
<br />
;[ftp://ftp.diku.dk/diku/semantics/papers/D-582.pdf Generic Discrimination: Sorting and Partitioning Unshared Data in Linear Time]<br />
:Fritz Henglein. 2008<br />
<br />
;[http://wwwtcs.inf.tu-dresden.de/~voigt/popl202-voigtlaender.pdf Much Ado about Two: A Pearl on Parallel Prefix Computation]<br />
:Janis Voigtländer. 2008.<br />
<br />
;[http://strictlypositive.org/CJ.pdf Clowns to the Left of me, Jokers to the Right: Dissecting Data Structures]: Conor McBride. 2008.<br />
<br />
;[http://www.ccs.neu.edu/home/dherman/research/papers/icfp07-great-escape.pdf Functional Pearl: The Great Escape: Or how to jump the border without getting caught]<br />
:David Herman. 2007.<br />
<br />
;[https://www.cs.indiana.edu/~adamsmd/papers/scrap_your_zippers/ScrapYourZippers-2007.pdf Scrap Your Zippers]<br />
:Michael Adams. 2007. Superseded by the [https://www.cs.indiana.edu/~adamsmd/papers/scrap_your_zippers/ScrapYourZippers-2010.pdf WGP 2010 version].<br />
<br />
;[http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.105.4086 A type-correct, stack-safe, provably correct expression compiler in Epigram]<br />
:James McKinna and Joel Wright. 2006.<br />
<br />
;[http://www.soi.city.ac.uk/~ross/papers/Applicative.pdf Applicative Programming with Effects]<br />
:Conor McBride and Ross Paterson. 2006.<br />
<br />
;[http://web.comlab.ox.ac.uk/people/Jeremy.Gibbons/publications/rationals.pdf Enumerating the rationals]<br />
:Jeremy Gibbons, David Lester and Richard Bird. 2006.<br />
<br />
;[http://www.cs.tufts.edu/~nr/comp150fp/archive/richard-bird/sudoku.pdf A program to solve Sudoku]<br />
:Richard Bird. 2006. (slides [http://icfp06.cs.uchicago.edu/bird-talk.pdf appear here], a Literate Haskell implementation by Graham Hutton based on this can be found [http://www.cs.nott.ac.uk/~gmh/sudoku.lhs here]).<br />
<br />
;[http://web.engr.oregonstate.edu/~erwig/papers/PFP_JFP06.pdf Probabilistic functional programming in Haskell]<br />
:Martin Erwig and Steve Kollmansberger. 2006. <br />
<br />
;[http://cms.brookes.ac.uk/staff/SharonCurtis/publications/marbles.ps.gz Marble mingling]<br />
:Sharon Curtis. 2006.<br />
<br />
;[http://wiki.di.uminho.pt/twiki/pub/Personal/Xana/WebHome/report.pdf Strong Types for Relational Databases]<br />
:Alexandra Silva, Joost Visser. 2006. (Haskell Workshop)<br />
<br />
;[http://okmij.org/ftp/papers/LogicT.pdf Backtracking, interleaving, and terminating monad transformers]<br />
:Oleg Kiselyov, Chung-chieh Shan, Daniel P. Friedman, Amr Sabry. 2005. <br />
<br />
;[http://homepages.inf.ed.ac.uk/jcheney/publications/cheney05icfp.pdf Scrap your Nameplate]<br />
:James Cheney. 2005.<br />
<br />
;[http://research.microsoft.com/~akenn/fun/picklercombinators.pdf Pickler Combinators]<br />
:Andrew Kennedy. 2004.<br />
<br />
;[http://web.cecs.pdx.edu/~mpj/pubs/composing-fractals.pdf Composing fractals]<br />
:Mark P. Jones. 2004.<br />
<br />
;[http://www.cs.dartmouth.edu/~doug/nfa.ps.gz Enumerating the strings of regular languages]<br />
:M. Douglas McIlroy. 2004.<br />
<br />
;[http://www.kestrel.edu/home/people/meertens/publications/papers/Calculating_the_Sieve_of_Eratosthenes.pdf Calculating the Sieve of Eratosthenes]<br />
:Lambert Meertens. Journal of Functional Programming, 14(6):759-763, 2004. ([http://web.comlab.ox.ac.uk/people/Jeremy.Gibbons/wg21/meeting57/meertens-sieve.pdf slides])<br />
<br />
;[http://pauillac.inria.fr/~maranget/enum/pearl.ps Functional satisfaction]<br />
:Luc Maranget. 2004. ([http://pauillac.inria.fr/~maranget/enum/index.html More info]).<br />
<br />
;[http://portal.acm.org/ft_gateway.cfm?id=1017481&type=pdf&coll=&dl=ACM&CFID=15151515&CFTOKEN=6184618 Implicit configurations--or, type classes reflect the values of types]<br />
:Oleg Kiselyov, Chung-chieh Shan. 2004. ([http://www.cs.rutgers.edu/~ccshan/prepose/p1214-kiselyov.pdf also here])<br />
<br />
;[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.23.145&rep=rep1&type=ps Global variables in Haskell]<br />
:John Hughes. 2004. ([http://journals.cambridge.org/action/displayAbstract?fromPage=online&aid=241773 JFP])<br />
<br />
;[http://portal.acm.org/ft_gateway.cfm?id=1017477&type=pdf&coll=&dl=ACM&CFID=15151515&CFTOKEN=6184618 I am not a number -- I am a free variable]<br />
:Conor McBride, James McKinna. 2004. <br />
<br />
;[http://www.informatik.uni-bonn.de/~ralf/hw2001/2.ps.gz Inverting the Burrows Wheeler transform]<br />
:Richard Bird and Shin-Cheng Mu. 2004. ([http://web.comlab.ox.ac.uk/people/Richard.Bird/online/BirdMu2004Inverting.pdf Also here]).<br />
<br />
;[http://web.comlab.ox.ac.uk/people/Jeremy.Gibbons/wg21/meeting56/loeh-paper.pdf Parsing permutation phrases]<br />
:Arthur Baars, Andres Loh and S. Doaitse Swierstra. 2004.<br />
<br />
;[http://web.cecs.pdx.edu/~antoy/homepage/publications/inject/paper.pdf Concurrent distinct choices]<br />
:Sergio Antoy and Michael Hanus. 2004. <br />
<br />
;[http://www.ling.gu.se/~peb/pubs/Ljunglof-2004b.pdf Functional chart parsing of context-free grammars]<br />
:Peter Ljunglf. 2004.<br />
<br />
;[http://www.seas.upenn.edu/~sweirich/papers/cast/cast.pdf Type-Safe Cast]<br />
:Stephanie Weirich. 2004.<br />
<br />
;[http://research.microsoft.com/~akenn/fun/picklercombinators.pdf Pickler Combinators]<br />
:Andrew J. Kennedy. 2004.<br />
<br />
;[http://www.cs.chalmers.se/~koen/pubs/jfp04-parser.ps Parallel Parsing Processes]<br />
:Koen Claessen. 2004.<br />
<br />
;[http://www.informatik.uni-bonn.de/~ralf/hw2001/1.pdf Derivation of a logarithmic time carry lookahead addition circuit]<br />
:John O'Donnell and Gudula Runger. 2004. ([http://portal.acm.org/citation.cfm?coll=GUIDE&dl=GUIDE&id=1030343 ACM]) ([http://journals.cambridge.org/action/displayAbstract?aid=254717 JFP]) ([http://www.informatik.uni-bonn.de/~ralf/hw2001/1.html Homepage]). <br />
<br />
;[http://pages.cs.brandeis.edu/~mairson/Papers/jfp02.pdf Linear lambda calculus and PTIME-completeness]<br />
:Harry G. Mairson. 2004. <br />
<br />
;[http://www.lri.fr/~filliatr/ftp/publis/kr-fp.ps.gz Producing all ideals of a forest, functionally]<br />
:Jean-Christophe Filliatre and Francois Pottier. 2003.<br />
<br />
;[http://www.informatik.uni-bonn.de/~ralf/publications/HW2003.pdf Trouble shared is trouble halved]<br />
:Richard Bird, Ralf Hinze. 2003<br />
<br />
;[http://www.informatik.uni-bonn.de/~ralf/publications/Format.ps.gz Formatting: a class act]<br />
:Ralf Hinze. 2003.<br />
<br />
;[http://www.informatik.uni-bonn.de/~ralf/publications/SearchTree.ps.gz A fresh look at binary search trees]<br />
:Ralf Hinze. 2002.<br />
<br />
;[http://www.cs.nott.ac.uk/~gmh/countdown.pdf The countdown problem]<br />
:Graham Hutton. 2002. <br />
<br />
;[http://pdos.csail.mit.edu/papers/packrat-parsing:icfp02.pdf Packrat parsing: simple, powerful, lazy, linear time, functional pearl]<br />
:Bryan Ford. 2002.<br />
<br />
;[http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.8.3014 Monads for Incremental Computing]<br />
:Magnus Carlsson. 2002.<br />
<br />
;[http://www.cs.nott.ac.uk/~gmh/wgp01/hinze-paper.pdf Haskell does it with class: Functorial unparsing]<br />
:Ralf Hinze. 2001.<br />
<br />
<br />
;[http://eprints.ouls.ox.ac.uk/archive/00000863/01/bird_2001_11_3.pdf Unfolding pointer algorithms]<br />
:Richard Bird. 2001.<br />
<br />
;[http://eprints.ouls.ox.ac.uk/archive/00000862/01/bird_2001.pdf Maximum marking problems]<br />
:Richard Bird. 2001. <br />
<br />
;[http://www.informatik.uni-bonn.de/~ralf/publications/TheWeb.ps.gz Weaving a web]<br />
:Ralf Hinze and Johan Jeuring. 2001. <br />
<br />
;[http://www.brics.dk/RS/01/16/BRICS-RS-01-16.pdf Normalization by evaluation with typed abstract syntax]<br />
:Olivier Danvy, Morten Rhiger and Kristoffer H. Rose. 2001. <br />
<br />
;[http://www.brics.dk/RS/01/10/BRICS-RS-01-10.ps.gz Do we need dependent types?]<br />
:Daniel Fridlender and Mia Indrika. 2001.<br />
<br />
;[http://www.informatik.uni-bonn.de/~ralf/publications/IAI-TR-99-4.ps.gz Perfect trees and bit-reversal permutations]<br />
:Ralf Hinze. 2000.<br />
<br />
;[http://spivey.oriel.ox.ac.uk/mike/bfs/bfs.ps Combinators for breadth-first search]<br />
:Michael Spivey. 2000 <br />
<br />
;[http://www.eecs.usma.edu/webs/people/okasaki/icfp00.ps Breadth-First Numbering: Lessons from a Small Exercise in Algorithm Design]<br />
:Chris Okasaki. 2000.<br />
<br />
;[http://www.informatik.uni-bonn.de/~ralf/publications/ICFP00.ps.gz Deriving Backtracking Monad Transformers]<br />
:Ralf Hinze. 2000.<br />
<br />
;[http://www.cis.upenn.edu/~bcpierce/papers/rsr.ps Recursive subtyping revealed]<br />
:Vladimir Gapeyev, Michael Y. Levin, Benjamin C. Pierce. 2000.<br />
<br />
;[http://research.microsoft.com/Users/simonpj/Papers/financial-contracts/contracts-icfp.ps.gz Composing contracts: an adventure in financial engineering]<br />
:Simon Peyton Jones, Jean-Marc Eber, Julian Seward. 2000.<br />
<br />
;[http://www.cs.chalmers.se/~koen/pubs/jfp99-monad.ps A poor man's concurrency monad]<br />
:Koen Claessen. 1999. <br />
<br />
;[http://www.informatik.uni-bonn.de/~ralf/publications/BinomialHeaps.ps.gz Explaining binomial heaps]<br />
:Ralf Hinze. 1999. <br />
<br />
;[http://www.cs.dartmouth.edu/~doug/pearl.ps.gz Power series, power serious]<br />
:M. Douglas McIlroy. 1999. <br />
<br />
;[http://www.eecs.usma.edu/webs/people/okasaki/jfp99.ps Red-black trees in a functional setting]<br />
:Chris Okasaki. 1999. <br />
<br />
;[http://www.cs.cmu.edu/~rwh/papers/regexp/jfp.ps Proof-directed debugging]<br />
:Robert Harper. 1999. (see also [http://ropas.snu.ac.kr/~kwang/paper/06-jfp-yi.pdf Proof-directed debugging: revisited for a first-order version]).<br />
<br />
;[http://web.comlab.ox.ac.uk/people/Jeremy.Gibbons/publications/radix.ps.gz A pointless derivation of radix sort]<br />
:Jeremy Gibbons. 1999.<br />
<br />
;[http://www.cs.nott.ac.uk/~gmh/pearl.pdf Monadic parsing in Haskell]<br />
:Graham Hutton and Erik Meijer . 1998.<br />
<br />
;[http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.49.6891 Polytypic unification]<br />
:Patrik Jansson and Johan Jeuring. 1998. <br />
<br />
;[http://web.engr.oregonstate.edu/~erwig/papers/Diet_JFP98.pdf Diets for fat sets]<br />
:Martin Erwig. 1998. <br />
<br />
;[http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.48.1673 Even higher-order functions for parsing or Why would anyone ever want to use a sixth-order function?]<br />
:Chris Okasaki. 1998.<br />
<br />
;[http://www.st.cs.uni-saarland.de/edu/seminare/2005/advanced-fp/docs/huet-zipper.pdf The Zipper]<br />
:Gerard Huet. 1997. (See also [http://en.wikibooks.org/wiki/Haskell/Zippers The Haskell Wikibook]).<br />
<br />
;[http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.55.7096 Lazy wheel sieves and spirals of primes]<br />
:Colin Runciman. 1997. <br />
<br />
;[http://www.eecs.usma.edu/webs/people/okasaki/jfp97.ps Three algorithms on Braun trees]<br />
:Chris Okasaki. 1997. <br />
<br />
;[http://web.comlab.ox.ac.uk/people/Jeremy.Gibbons/publications/thirdht.ps.gz The Third Homomorphism Theorem]<br />
:Jeremy Gibbons. 1996.<br />
<br />
;[http://www.cs.nott.ac.uk/~gmh/basics.pdf Back to Basics: Deriving Representation Changers Functionally].<br />
:Graham Hutton, Erik Meijer. 1996.<br />
<br />
;[http://research.microsoft.com/~akenn/fun/DrawingTrees.pdf Drawing Trees]<br />
:Andrew J. Kennedy. 1996.<br />
<br />
;[http://research.microsoft.com/~nick/newtrans.pdf Undoing Dynamic Typing]<br />
:Nick Benton. 2008.<br />
<br />
;[http://web.comlab.ox.ac.uk/people/Jeremy.Gibbons/publications/drawing.ps.gz Deriving Tidy Drawings of Trees]<br />
:Jeremy Gibbons. 1996. (See also [http://www.cs.auckland.ac.nz/CDMTCS//researchreports/003drawing.pdf the research report]).<br />
<br />
;[http://groups.csail.mit.edu/mac/users/adams/BB/ Efficient Sets - A Balancing Act]<br />
:Stephen Adams. 1993. ([http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Set.html Data.Set]).<br />
<br />
=== Potential Pearls ===<br />
<br />
Unpublished pearls.<br />
<br />
;[http://www.informatik.uni-bonn.de/~ralf/publications/Quote.pdf Typed Quote/AntiQuote]<br />
:Ralf Hinze. Unpublished work in progress.<br />
<br />
;[http://www.cs.nott.ac.uk/~txa/publ/alpha-draft.pdf &alpha;-conversion is easy]<br />
:Thorsten Altenkirch. Unpublished draft.<br />
<br />
=== Offline ===<br />
<br />
These appear not to be available online, unfortunately. If you know where they live, please link, and move into the 'online' section!<br />
<br />
;[http://www.cs.kent.ac.uk/pubs/2001/1293/index.html Red-black trees with types]<br />
:Stefan Kahrs. 2001. ([http://journals.cambridge.org/action/displayAbstract?aid=83905 JFP]) ([http://www.cs.kent.ac.uk/people/staff/smk/redblack/rb.html Code!])<br />
<br />
;On generating unique names<br />
:Lennart Augustsson, M Rittri, D Synek. 1994. ([http://www.cs.chalmers.se/~rittri/#publications Rittri's homepage])<br />
<br />
;A Symmetric Set of Efficient List Operations.<br />
:Rob R. Hoogerwoord, 1992. ([https://venus.tue.nl/ep-cgi/ep_publ.opl?taal=NL&fac_id=92&rn=19840694 Hoogerwoord's homepage]).<br />
<br />
;[http://journals.cambridge.org/action/displayAbstract?fromPage=online&aid=335124 Finding celebrities: A lesson in functional programming]<br />
:Richard Bird and Sharon Curtis. 2006. ([http://cms.brookes.ac.uk/staff/SharonCurtis/publications/index.html#celebrities See also]).<br />
<br />
;[http://journals.cambridge.org/action/displayAbstract?aid=254705 On tiling a chessboard]<br />
:Richard Bird. 2004. ([http://portal.acm.org/citation.cfm?id=1030333.1030336 ACM]) <br />
<br />
;[http://journals.cambridge.org/action/displayAbstract?fromPage=online&aid=44141 Meertens number]<br />
:Richard Bird. 1998.<br />
<br />
;[http://journals.cambridge.org/action/displayAbstract?aid=44091 On merging and selection]<br />
:Richard Bird. 1997. (See also [http://web.comlab.ox.ac.uk/people/Jeremy.Gibbons/publications/merging.ps.gz More on Merging and Selection]).<br />
<br />
;[http://journals.cambridge.org/action/displayAbstract?aid=44107 On building trees with minimum height]<br />
:Richard Bird. 1997. ([http://web.comlab.ox.ac.uk/people/Richard.Bird/publications-bib.html#Bird97:OnBuilding Bib]).<br />
<br />
;The Last Tail. <br />
:Richard Bird. 1993. ([http://web.comlab.ox.ac.uk/people/Richard.Bird/publications-bib.html#Bird93:Last Bib]).<br />
<br />
;Two Greedy Algorithms<br />
:Richard Bird, 1992. ([http://web.comlab.ox.ac.uk/oucl/work/richard.bird/publications-bib.html#Bird92:Two Bib]).<br />
<br />
;On Removing Duplicates<br />
:Richard Bird. 1991. ([http://web.comlab.ox.ac.uk/oucl/work/richard.bird/publications-bib.html#DBLP:journals/jfp/Bird91a Bib]).<br />
<br />
[[Category:Research]] [[Category:Tutorials]]</div>Sjoerd visscherhttps://wiki.haskell.org/CamHacCamHac2011-05-26T22:42:25Z<p>Sjoerd visscher: Added 5 more attendees</p>
<hr />
<div>Haskell Hackaton in Cambridge, UK, '''August 12-14, 2011'''<br />
<br />
== About ==<br />
<br />
Come and spend a weekend in Cambridge hacking Haskell code in great surroundings with fantastic company! Haskell Hackathons are a tradition where everyone is welcome; we get together, work on projects with others or just do your own thing, the overall goal being to improve the Haskell ecosystem.<br />
<br />
CamHac will be held from 12-14 August 2011, at [http://www.homertonconference.com/ Homerton College] in Cambridge. As with previous Hackathons, all are welcome -- you do not have to be a Haskell guru. All you need is a basic knowledge of Haskell, a willingness to learn, and a project you're excited to help with (or a project of your own to work on).<br />
<br />
There will be lots of hacking, good food, and, of course, fun! <br />
<br />
* Organiser: [mailto:marlowsd@gmail.com Simon Marlow] (<tt>JaffaCake</tt> on IRC)<br />
* Mailing list: [http://www.haskell.org/mailman/listinfo/hackathon hackathon@haskell.org]<br />
* IRC channel: #ghc on FreeNode<br />
<br />
Many thanks to [http://research.microsoft.com/en-us/labs/cambridge/default.aspx Microsoft Research Cambridge] for agreeing to sponsor the event.<br />
<br />
== Registration ==<br />
<br />
'''Registration deadline''': Friday 15th July 2011<br />
<br />
Registration is free. To register, please email [mailto:msrcevnt@microsoft.com msrcevnt@microsoft.com] stating that you would like to register for the "Haskell Hackathon", with the following information<br />
<br />
Full name:<br />
Which days you are attending on:<br />
day 1: yes/no<br />
day 2: yes/no<br />
day 3: yes/no<br />
Dietary requirements:<br />
<br />
The venue is '''limited to 50 people''', and registration is first-come first-served, so register quickly to reserve your place! (but only register if you definitely intend to come, and please let us know if you find you cannot make it for any reason after you have registered, so we can re-allocate your place).<br />
<br />
== Venue ==<br />
<br />
We're in the [http://www.homertonconference.com/Horobin.html Horobin Room] of [http://www.homertonconference.com/ Homerton Conference Centre]. It is about [http://www.google.co.uk/maps?f=d&source=s_d&saddr=United+Kingdom+(Cambridge,+Railway+Station+(Stop+B))&daddr=CB2+8PH&hl=en&geocode=FehrHAMdjhUCACHpLU_p7S-CNg%3BFc5LHAMdNhMCACmn-uB8eXrYRzFlrDhff7fJ9A&mra=iwd&dirflg=w&sll=52.190667,0.134583&sspn=0.021547,0.040598&ie=UTF8&z=16 15 minutes walk from the train station], and Cambridge town centre is about 30 minutes walk.<br />
<br />
There will be WiFi access.<br />
<br />
There will be a projector for giving talks/demos. We will probably reserve a part of the time for talks and demos.<br />
<br />
== Food ==<br />
<br />
Tea and coffee will be supplied. We will have to go out to find lunch, but there are various places to eat and buy food at the [http://www.cambridge-x.co.uk Cambridge Leisure Park] a few minutes walk towards Cambridge town centre. In the evening we will probably head towards the town where there are plenty of good restaurants.<br />
<br />
== Local arrangements ==<br />
<br />
=== Getting to Cambridge ===<br />
<br />
==== By Plane ====<br />
<br />
* [http://www.stanstedairport.com/ Stansted Airport]: Stansted is the nearest of the London-area airports to Cambridge. It is mostly served by flights to and from mainland Europe, Ireland, and elsewhere in the UK. <br />
<br />
* [http://www.heathrowairport.com/ Heathrow Airport]: Heathrow is the principal London-area airport and one of the busiest in Europe with a wide range of national, European, and international services. <br />
<br />
* [http://www.gatwickairport.com/ Gatwick Airport]: Gatwick is the second "London" airport with a wide range of national, European and international services. <br />
<br />
* Other airports: [http://www.london-luton.co.uk/ Luton Airport], [http://www.norwichairport.co.uk/ Norwich airport], and [http://www.southendairport.com/ Southend airport] are other regional airports in the East Anglia region. If you use these, car or taxi is the best option for travel to Cambridge. <br />
<br />
==== Trains from London ====<br />
<br />
London has two train lines into Cambridge, London Kings Cross and London Liverpool Street. There is a regular service on both lines and duration is under an hour on the direct trains. Go to [http://www.nationalrail.co.uk National Rail] to check train times<br />
<br />
=== Getting to the venue ===<br />
<br />
[http://www.google.co.uk/maps?f=d&source=s_d&saddr=United+Kingdom+(Cambridge,+Railway+Station+(Stop+B))&daddr=CB2+8PH&hl=en&geocode=FehrHAMdjhUCACHpLU_p7S-CNg%3BFc5LHAMdNhMCACmn-uB8eXrYRzFlrDhff7fJ9A&mra=iwd&dirflg=w&sll=52.190667,0.134583&sspn=0.021547,0.040598&ie=UTF8&z=16 Walk from the train station] (about 15 minutes)<br />
<br />
[http://www.homertonconference.com/How-to-find-us.html How to find the venue]<br />
<br />
'''Local Taxis''': Panther Taxis 01223 715715<br />
<br />
=== Accommodation ===<br />
<br />
[http://www.visitcambridge.org/VisitCambridge/WhereToStay.aspx VisitCambridge: Where to Stay in Cambridge]<br />
<br />
The nearest hotels to the venue seem to be:<br />
<br />
* [http://www2.travelodge.co.uk/ Travelodge] (Cambridge Central) is just a few minutes walk from the venue. It is currently charging £65.80 per night for 11-14 August.<br />
* [http://www.helenhotel.co.uk/index.htm Helen Hotel]<br />
* [http://www.bandbincambridgeshire.co.uk/ Bridge Guest House]<br />
* [http://www.cheapguesthouses.com/ Fairways Guest House]<br />
* [http://www.abbeyfieldguesthouse.com/ Abbeyfield Guest House]<br />
* [http://rockviewguesthouse.co.uk/default.aspx Rock View Guest House]<br />
<br />
If you contact any of the above and find they're booked up, please remove them from the list.<br />
<br />
Microsoft Research recommends the following hotels to visitors, these are closer to the city centre but are probably a lot more expensive than those above:<br />
<br />
* [http://www.hilton.co.uk/cambridgegardenhouse Double Tree by Hilton Garden House Cambridge]<br />
* [http://www.ichotelsgroup.com/h/d/cp/1/en/hotel/cbguk Crowne Plaza Cambridge]<br />
* [http://www.devere.co.uk/our-locations/university-arms.html De Vere University Arms]<br />
<br />
== Projects ==<br />
<br />
Use this space to list projects you are interested in working on, and add your name to projects you are interested in helping with.<br />
<br />
* General hacking away at Snap Framework (exact goals TBD), perhaps adding/improving documentation/tutorials at the same time. (Jurriën Stutterheim)<br />
<br />
== Attendees ==<br />
<br />
* Simon Marlow<br />
* Jurriën Stutterheim<br />
* Neil Mitchell<br />
* Jasper Van der Jeugt<br />
* Max Bolingbroke<br />
* Ben Millwood<br />
* Roman Leshchinskiy<br />
* Gregory Collins<br />
* Martijn van Steenbergen<br />
* Sjoerd Visscher<br />
* Sebastiaan Visser<br />
* Tom Lokhorst<br />
* Erik Hesselink<br />
* Add your name here, once registered...</div>Sjoerd visscherhttps://wiki.haskell.org/MultiplateMultiplate2010-12-07T10:57:11Z<p>Sjoerd visscher: /* Alternative Plates */</p>
<hr />
<div>== Making a Multiplate instance ==<br />
<br />
The easiest way to understand how to use Multiplate is to look at a simple example. We assume you have the transformers library installed.<br />
<br />
<pre><br />
<br />
> import Data.Generics.Multiplate<br />
> import Data.Functor.Constant<br />
> import Data.Functor.Identity<br />
<br />
</pre><br />
<br />
Suppose you defined the follow set of mutually recursive data types for a simple language.<br />
<br />
<pre><br />
<br />
> data Expr = Con Int<br />
> | Add Expr Expr<br />
> | Mul Expr Expr<br />
> | EVar Var<br />
> | Let Decl Expr<br />
> deriving (Eq, Show)<br />
> <br />
> data Decl = Var := Expr<br />
> | Seq Decl Decl<br />
> deriving (Eq, Show)<br />
> <br />
> type Var = String<br />
<br />
</pre><br />
<br />
The first thing we are going to define is a 'plate' for this language.<br />
<br />
<pre><br />
<br />
> data Plate f = Plate<br />
> { expr :: Expr -> f Expr<br />
> , decl :: Decl -> f Decl<br />
> }<br />
<br />
</pre><br />
<br />
A plate is a record type that is parametrized by an applicative functor <code>f</code>. There is one field for each type in the mutually recursive structure we want to write generic functions for. Each field has type <code>A -> f A</code> where <code>A</code> is one of the data types.<br />
<br />
To use the Multiplate library we have to make <code>Plate</code> and instance of the <code>Multiplate</code> class. The instance requires that we write two functions: <code>multiplate</code> and <code>mkPlate</code>. Let's define each of these functions in turn.<br />
<br />
<pre><br />
<br />
> instance Multiplate Plate where<br />
<br />
</pre><br />
<br />
We have to write one piece of boilerplate code for <code>multiplate</code>. However, once this is implemented, no further boilerplate code need be written.<br />
<code>multiplate</code> takes a <code>Plate</code> as a parameter. The idea is that for each expression in our language we will call this a function from this <code>Plate</code> parameter on the children of our expression and then combine the results.<br />
<br />
<pre><br />
<br />
> multiplate child = Plate buildExpr buildDecl<br />
> where<br />
> buildExpr (Add e1 e2) = Add <$> expr child e1 <*> expr child e2<br />
> buildExpr (Mul e1 e2) = Mul <$> expr child e1 <*> expr child e2<br />
> buildExpr (Let d e) = Let <$> decl child d <*> expr child e<br />
> buildExpr e = pure e<br />
> buildDecl (v := e) = (:=) <$> pure v <*> expr child e<br />
> buildDecl (Seq d1 d2) = Seq <$> decl child d1 <*> decl child d2<br />
<br />
</pre><br />
<br />
Notice that when an expression has no children, as in the case of <code>v</code> in <code>v := e</code>, we simply use <code>pure v</code>.<br />
<code>pure</code> is used to handle the default case in <code>buildExpr</code>, also have no subexpressions.<br />
<br />
Next we have to define <code>mkPlate</code>. <code>mkPlate</code> is a function that builds a <code>Plate</code> given a generic builder function that produces values of type <code>a -> f a</code>. However these generic builder functions require a bit of help. The need to know what the projection function for the field that they are building is, so we pass that as a parameter to them.<br />
<br />
<pre><br />
<br />
> mkPlate build = Plate (build expr) (build decl)<br />
<br />
</pre><br />
<br />
That's it. Now we are ready to use out generic library to process our mutually recursive data structure without using any more boilerplate.<br />
<br />
== Generic Programing with Multiplate ==<br />
<br />
=== Monoids ===<br />
<br />
Suppose we we want to get a list of all variables used in an expression. To do this we would use <code>preorderFold</code> with the list monoid. The first step is to build a <code>Plate</code> that handles the cases we care about. What we can do is use the default <code>purePlate</code> which does nothing, and modify it to handle the cases we care about.<br />
<br />
<pre><br />
getVariablesPlate :: Plate (Constant [Var])<br />
getVariablesPlate = purePlate { exprPlate = exprVars }<br />
where<br />
exprVars (EVar v) = Constant [v]<br />
exprVars x = pure x<br />
</pre><br />
<br />
This can be written alternatively using some list comprehension tricks<br />
<br />
<pre><br />
getVariablesPlate = purePlate {expr = \x -> Constant [s|EVar s <- [x]]}<br />
</pre><br />
<br />
Now we can can build a plate that will get variables from all subexpressions and concatenate them together into one big list<br />
<br />
<pre><br />
variablesPlate = preorderFold getVariablesPlate<br />
</pre><br />
<br />
In a real program we would either put <code>getVariablesPlate</code> into <code>variablesPlates</code>'s <code>where</code> clause or else simply inline<br />
the definition.<br />
<br />
<code>variablesPlate</code> is a record of functions that will give a list of variables for each type in our mutually recursive record. Say we have an <code>Expr</code> we want to apply this to.<br />
<br />
<pre><br />
e1 :: Expr<br />
e1 = Let ("x" := Con 42) (Add (EVar "x") (EVar "x"))<br />
</pre><br />
<br />
We can project out the function for <code>Expr</code>'s from our plate apply it to <code>e1</code> and then unwrap the <code>Constant</code> wrapper. There is a little helper function, called <code>foldFor</code>, that will upgrade of projection function to remove the <code>Constant</code> wrapper for us.<br />
<br />
<pre><br />
>>> foldFor expr variablesPlate e1<br />
<br />
["x","x"]<br />
</pre><br />
<br />
=== Traversing ===<br />
<br />
Suppose we want to recursively evaluate constant expressions in the language.<br />
We can use <code>mapFamily</code> for this.<br />
We define a <code>Plate Identity</code> for the functionality we care about.<br />
<br />
<pre><br />
doConstFold :: Plate Identity<br />
doConstFold = purePlate { expr = exprConst }<br />
where<br />
expr (Add (Con x) (Con y)) = return (Con (x + y))<br />
expr (Mul (Con x) (Con y)) = return (Con (x * y))<br />
expr x = pure x<br />
</pre><br />
<br />
Now we can can build a plate that will repeatedly apply this transformation from bottom up.<br />
<br />
<pre><br />
constFoldPlate = mapFamily doConstFold<br />
</pre><br />
<br />
Let's build an declaration to test.<br />
<br />
<pre><br />
d1 :: Decl<br />
d1 = "x" := (Add (Mul (Con 42) (Con 68)) (Con 7))<br />
</pre><br />
<br />
We can project out the function for <code>Decl</code>'s from our plate apply it to <code>d1</code> and then unwrap the <code>Identity</code> wrapper. Again, there is a little helper function, called <code>traverseFor</code>, that will upgrade of projection function to remove the <code>Identity</code> wrapper for us.<br />
<br />
<pre><br />
>>> traverseFor decl constFoldPlate d1<br />
<br />
"x" := Con 2863<br />
</pre><br />
<br />
== Alternative Plates ==<br />
<br />
Multiplate does not have to be used in the above way. Any structure can be made an instance of <code>Multiplate</code> as long as the following two Multiplate laws are satisfied:<br />
<br />
<OL><br />
<LI><code>multiplate purePlate = purePlate</code><br />
<LI><code>multiplate (composePlate p1 p2) = composePlate (multiplate p1) (multiplate p2)</code><br />
</OL><br />
<br />
For example, Sjoerd Visscher gives [https://gist.github.com/707890 an example] of a plate where each constructor of each data type has its own field in a record structure.<br />
<br />
== Links ==<br />
<br />
[http://hackage.haskell.org/package/multiplate Multiplate on Hackage]</div>Sjoerd visscherhttps://wiki.haskell.org/Ghent_Functional_Programming_Group/BelHac/RegisterGhent Functional Programming Group/BelHac/Register2010-09-08T09:46:00Z<p>Sjoerd visscher: </p>
<hr />
<div>Important: Please wait for a confirmation email before booking any flights/hotels.<br />
<br />
Registration is via email to Jasper Van der Jeugt at<br />
<br />
jaspervdj+belhac@gmail.com<br />
<br />
with the subject<br />
<br />
BelHac registration <br />
<br />
and body containing the following information:<br />
<br />
Name:<br />
#haskell nick: (if applicable)<br />
Email:<br />
Food restrictions:<br />
Days attending: <br />
<br />
Here is an example:<br />
<br />
Name: Jasper Van der Jeugt<br />
Nick: jaspervdj<br />
Email: jaspervdj@gmail.com<br />
Food restrictions: Raw flesh only<br />
Days attending: Friday, saturday and sunday<br />
<br />
If you want, you can also add you name here:<br />
<br />
{| class="wikitable"<br />
! Nickname<br />
! Real Name<br />
! Affiliation<br />
! Mobile #<br />
! Email<br />
! Arriving - Departing<br />
! Accomodation<br />
|-<br />
| jaspervdj<br />
| Jasper Van der Jeugt<br />
| Ghent University<br />
| +32 476 26 48 47<br />
| jaspervdj@gmail.com<br />
| <br />
| Has a small place in Ghent<br />
|-<br />
| Itkovian<br />
| Andy Georges<br />
| Ghent University/FWO<br />
| <br />
| itkovian@gmail.com<br />
|<br />
| Lives in Ostend, arrives by train on daily basis<br />
|-<br />
| Javache<br />
| Pieter De Baets<br />
| Ghent University<br />
| <br />
| pieter.debaets@gmail.com<br />
|<br />
|<br />
|-<br />
| boegel<br />
| Kenneth Hoste<br />
| Ghent University<br />
| <br />
| kenneth.hoste@ugent.be<br />
|<br />
| commute to/from Ghent daily<br />
|-<br />
| BCoppens<br />
| Bart Coppens<br />
| Ghent University<br />
| <br />
| bart.coppens@elis.ugent.be<br />
|<br />
|<br />
|-<br />
| jejansse<br />
| Jeroen Janssen<br />
| VUB<br />
|<br />
| jejansse@gmail.com<br />
|<br />
| Lives in Ghent.<br />
|-<br />
| Feuerbach<br />
| Roman Cheplyaka<br />
| <br />
| +380662285780<br />
| roma@ro-che.info<br />
| unknown yet<br />
| unknown yet<br />
|-<br />
| solidsnack<br />
| Jason Dusek<br />
| Heroku<br />
| +1 415 894 2162<br />
| jason.dusek@gmail.com<br />
| 5th-7th<br />
| Probably Monasterium.<br />
|-<br />
| kosmikus<br />
| Andres L&ouml;h<br />
| Well-Typed LLP<br />
|<br />
| mail@andres-loeh.de<br />
| 5th-7th<br />
|<br />
|-<br />
| Igloo<br />
| Ian Lynagh<br />
| Well-Typed LLP<br />
|<br />
| igloo@earth.li<br />
| 5th-7th<br />
|<br />
|-<br />
| dcoutts<br />
| Duncan Coutts<br />
| Well-Typed LLP<br />
|<br />
| duncan.coutts@googlemail.com<br />
| 5th-7th<br />
|<br />
|-<br />
| wvdschel<br />
| Wim Vander Schelden<br />
| Ghent University<br />
| <br />
| belhac@fixnum.org<br />
| <br />
| Lives in Ghent<br />
|-<br />
| sjoerd_visscher<br />
| Sjoerd Visscher<br />
| SDL Xopus<br />
| <br />
| sjoerd@w3future.com<br />
| 5th-7th<br />
| youth hostel<br />
|}</div>Sjoerd visscherhttps://wiki.haskell.org/ZuriHac2010/ProjectsZuriHac2010/Projects2010-03-20T08:46:50Z<p>Sjoerd visscher: </p>
<hr />
<div>== Generic information ==<br />
<br />
You can apply for an account and a project using<br />
[http://community.haskell.org/admin/ the community server].<br />
<br />
Once you have an account and/or a project, you upload a Darcs repository as follows. First, initialize your repository on the server:<br />
<br />
$ ssh community.haskell.org<br />
you@haskell:~$ cd /srv/code/yourproject<br />
you@haskell:/srv/code/yourproject$ darcs init<br />
<br />
Then, log out and push your repository:<br />
<br />
$ darcs push community.haskell.org:/srv/code/yourproject<br />
<br />
== Projects ==<br />
<br />
If you have a project that you want to work on at the Hackathon, please describe it here.<br />
<br />
Since Hackathons are great for teamwork, consider joining one of the projects mentioned below. If you're interested in one of these projects, add your name to the list of hackers under that project.<br />
<!-- Copy this template<br />
=== Project name ===<br />
<br />
I am a project. Love me.<br />
<br />
Hackers: Hacker 1, Hacker 2<br />
--><br />
<br />
=== Darcs ===<br />
<br />
A large chunk of the Darcs team will be at ZuriHac. We would be delighted for you to join in and do some hacking with us. To help you get started, we have a big list of ProbablyEasy bugs to chew on. See our [http://wiki.darcs.net/Sprints/2010-03 sprint page] for more details!<br />
<br />
Hackers: Florent Becker, Guillaume Hoffmann, Eric Kow, Reinier Lamers, Petr Rockai, Ganesh Sittampalam and more...<br />
<br />
=== DPM (Darcs Patch Manager) ===<br />
<br />
The Darcs Patch Manager (DPM for short) is a tool that simplifies working with darcs. It is most effective when used in an environment where developers do not push their patches directly to the main repository but where patches undergo a reviewing process before they are actually applied. See http://www.factisresearch.com/2010/03/dpm/ for a short tutorial.<br />
<br />
At the hackathon, we would like to add support for detecting conflicts between patches to the DPM. Some help from the darcs hackers on ideas how this feature could be realized would be great! Also, the integration with darcs is quite fragile, so we would also appreciate feedback from darcs hackers here.<br />
<br />
Here are some ideas:<br />
<br />
* Track conflicts. DPM should be aware of conflicts between two patches and between a patch and the current state of the repo.<br />
* Diff between two patches in the same patch group.<br />
* Improved apply command. DPM should select automatically the patch to apply instead of relying on darcs' interactive apply command<br />
* Proper configuration file. At the moment, DPM relies exclusively on commandline arguments for customization.<br />
* Some more patch states could be useful: DISCUSSION (similar to UNDECIDED but already reviewed and awaiting feedback from the patch developer), UNAPPLICABLE, ACCEPTED (ready to be applied but still unapplied). We should discuss which of these states are really needed and which can already be represented through the existing states + comments + the reviewed flag.<br />
* The review command should offer the possibility to apply the patch directly to the repo. Something dialog like this would be cool:<br />
<br />
What should I do with this patch?<br />
a) accept<br />
r) reject<br />
d) discard<br />
w) wait<br />
s) send review to author and wait<br />
<br />
* Support for transitive dependencies<br />
* Readline support<br />
* Cleanup command (remove closed patch groups from the DB)<br />
* Automatize interactive tests. DPM is lacking a good test suite. Often, I test DPM interactively by executing a series of shell commands and checking that the output is correct. It would be nice if we could record the shell commands and their output (the script tool could be useful here), so that we could replay them later.<br />
* Bounce patch via email.<br />
* Webfrontend for 'dpm list'<br />
<br />
Hackers: Stefan Wehr<br />
<br />
=== Need for speed ===<br />
<br />
In 2006 the Python community had a [http://wiki.python.org/moin/NeedForSpeed NeedForSpeed sprint]. Some Haskell libraries, like the containers library, could use some benchmarks (using e.g. [http://hackage.haskell.org/package/criterion Criterion]) and hopefully some performance improvements.<br />
<br />
=== event ===<br />
<br />
The [http://github.com/tibbe/event event library] will hopefully replace GHC's I/O manager with a more scalable implementation, based on better data structures and more efficient system calls (e.g. epoll/kqueue).<br />
<br />
The project is nearing completion, but more testing and benchmarking is needed. The code also needs to be merged into GHC.<br />
<br />
Hackers: Johan Tibell<br />
<br />
=== Data.Binary on continuations ===<br />
<br />
The [http://code.haskell.org/binary/ Data.Binary library] provides blazing fast reading/writing of binary data. There are a few things I'd like to see improved, hopefully before inclusion in the [http://hackage.haskell.org/platform/ Haskell Platform]:<br />
<br />
* It's not possible to use the library on large inputs without resorting to lazy I/O. By changing the underlying implementation to use continuations and expose a continuations based API we can process large inputs without resorting to unsafe operations. This needs to be done while still offering good performance.<br />
* The library lacks error handling. The above implementation would naturally support communicating errors to the user. There are however other ways to achieve the same result.<br />
* The library currently includes two separate features in one package, low-level binary parsing of simple types (e.g. Ints and Words) and a data format (the Binary typeclass). Arguably the library should be split in two.<br />
* The binary data format should be documented and it should be clear which types are guaranteed to have the same encoding for the foreseeable future.<br />
<br />
Hackers: Johan Tibell, Christophe Poucet, Marc A. Ziegert, Lennart Kolmodin<br />
<br />
Comment by Jürgen "Jutaro" Nicklisch: I've hacked an addition package to binary: [http://hackage.haskell.org/package/binary-shared binary-shared], which gives sharing of data for serialization and deserialization. For my app this gives a huge saving of space and time and I think it would be reasonable to integrate this into the binary package. <br />
<br />
Comment by David Anderson: A good place to start for switching to CPS might be Attoparsec. The internals are very fast, and could probably make it into Binary.Get easily.<br />
<br />
Comment by Lennart Kolmodin: I've got a CPS based version of binary working at <br />
http://haskell.org/~kolmodin/code/binary-push/ The Data.Binary.Get has been rewritten, some functions are still missing from the original API.<br />
<br />
=== Adaptable containers ===<br />
<br />
Scala's collection library was [http://www.scala-lang.org/node/2060 completely overhauled] in 2.8. The [http://hackage.haskell.org/package/containers containers library] is a bit dated. There are several things that could be done:<br />
<br />
* Write a new library based on associate data types, yielding performance improvements.<br />
* Write more tests and add some [http://hackage.haskell.org/package/criterion Criterion] benchmarks.<br />
* Consolidate API naming, exported functions, etc.<br />
<br />
Hackers: Christophe Poucet <br />
<br />
=== Leksah ===<br />
<br />
I will work on Leksah and help is needed and welcome<br />
<br />
* Packaging for Debian/Ubuntu<br />
* Editor for Cabal files with configurations<br />
* Concept for Plugins/Extensions<br />
* Fixing bugs<br />
* ...<br />
<br />
Hackers: Jürgen Nicklisch<br />
<br />
=== arbtt ===<br />
<br />
The automatic rule based time tracker needs some love. Possible projects are <br />
<br />
* Graphical statistics<br />
* Export to hamster db (they have nice statistics)<br />
* More powerful date/time manipulation rules (including type inference and good error messages)<br />
* Performance improvements<br />
* ...<br />
<br />
Hackers: Joachim “nomeata” Breitner, Martin Kiefel<br />
<br />
=== loker ===<br />
<br />
Loker is:<br />
* library for parsing (POSIX) UNIX Shell scripts<br />
* program for static analysis of Shell scripts<br />
* compiler for Shell scripts<br />
* whatever you can imagine related to Shell scripts.<br />
<br />
Currently the parser part is almost done. See [http://github.com/feuerbach/loker githug repository].<br />
<br />
I am happy to see anyone interested in the project, please contact [http://ro-che.info/ me].<br />
<br />
Hackers: Roman Cheplyaka<br />
<br />
=== JPEG-decoder ===<br />
<br />
Package stb-image contains a JPEG-decoding function, but it is a wrapper around a C function. Obviously, it is not the Haskell spirit to let C do the dirty work!<br />
<br />
I once wrote a JPEG-decoder purely in Haskell. It is optimized for readability rather than speed.<br />
During the Hackathon, I want to: <br />
* package it under Cabal<br />
* try and optimize it (using bytestreams (or bitstreams?))<br />
* see whether it competes with the C implementation...<br />
Help of hackers who know bytestreams is appreciated (you don't need knowledge of JPEG to participate in this project).<br />
<br />
Hackers: Jeroen Fokker.<br />
<br />
=== hledger ===<br />
[http://hledger.org/ Hledger] is a personal finance manager. Hackers are welcome! Hledger's author Simon Michael will be (remotely) with us.<br />
<br />
Tasks:<br />
# Readline-like interface in "hledger add", perhaps using shellac <br />
# Embedded calculator into "hledger add"<br />
# Exporting data to R<br />
# Improve hledger as a library. Design good API<br />
# Also see ideas [http://groups.google.com/group/hledger/msg/9827288df3e5bf51 here]; feel free to add them to this list if you are going to hack on them<br />
<br />
Hackers: Roman Cheplyaka<br />
<br />
=== BlazeHtml ===<br />
There are several HTML combinator libraries on hackage, but we still need one that is *really* fast. This is attempt to tackle the problem [http://hackage.haskell.org/trac/summer-of-code/ticket/1580 described here]. A simple API proposal can be found [http://gist.github.com/332603 here], and the corresponding github repo [http://github.com/jaspervdj/BlazeHtml is here]. Everyone is welcome to hack on this (new) project, if you're interested please contact [http://jaspervdj.be/contact.html me].<br />
<br />
Hackers: Jasper Van der Jeugt, Simon Meier, Christopher Done(?)<br />
<br />
* I'm interested in this -- I've forked your github gist. Do you want to start a proper project that we can fork? I'll try to come up with some Criterion tests and QuickCheck properties. I'm interested in adding a type-safe layer which may require some newtypes. Criterion will help determine how detrimental this is to speed and space. ---- [[User:Chrisdone|Chrisdone]] 22:17, 15 March 2010 (UTC)<br />
<br />
=== Pesto ===<br />
I will be working on the Pesto web framework. Rather than a regular framework, it is a collection of orthogonal modules for the model, view and controller part. I will try to release the [http://github.com/chriseidhof/regular-web regular-web] package and possibly work on the [http://github.com/chriseidhof/Basil Basil] library.<br />
<br />
Hackers: Chris Eidhof, Christopher Done(?)<br />
<br />
===Sirenial===<br />
[http://code.google.com/p/sirenial/ Sirenial] is a type-safe SQL wrapper. Compared to HaskellDB it uses simpler types and is able to automatically and transparently merge similar SELECT queries. During the Hackathon I will aim to bring the project to a usable state and release a first version on Hackage.<br />
<br />
Hackers: Martijn van Steenbergen<br />
<br />
=== UHC ===<br />
We will work on library support (Cabal, FFI) for UHC.<br />
There are many other projects, work in progress, etc, so just ask us if you want<br />
to work on a UHC related project or just are interested to know a bit more about its internals.<br />
<br />
Hackers: Atze Dijkstra, Andres L&ouml;h, Jeroen Fokker<br />
<br />
=== Testable Documentation ===<br />
I'll work on testable documentation. There is still some work to be done on [http://hackage.haskell.org/package/DocTest DocTest] (e. g. integration with Haddock, support for QuickCheck properties). An other idea is to define some format for tutorials, that allows us to verify that given Examples do actually work. Please drop me some lines (simon hengel at wiktory org), if you are interested in the topic.<br />
<br />
'''Update:''' I plan to finish DocTest integration with Haddock and then spend the rest of the weekend on Cabal. If you are interested in testable documentation or if you have any ideas, I would still like to chat with you;)<br />
<br />
Hackers: Simon Hengel<br />
<br />
=== Histories on data types ===<br />
I'm going to be working on a seamlessly extending ADTs with histories and lifting functions on those ADTs to properly extend the histories. Things I'll probably spend time on: trying to find a clean SYB formulation for this, and extending the Diff library on Hackage to work on ByteString and Text.<br />
<br />
Hackers: Fred Ross<br />
<br />
=== Haskell eval/type-checker/smallchecker as a RESTful service ===<br />
Considering hacking more on the libraries behind TryHaskell as a service for checking small chunks of code -- similar to CodePad but as a RESTful service callable from JavaScript. This could be used on tutorials and online books such as Learn You A Haskell for testing code samples and interactive exercises (e.g. using smallcheck to check correctness of exercise answers). I envisage blog posts showing snippets that one can run in-page. It's currently on my home computer but I have set a Linode VPS for this purpose (it could also work with multiple hosts although I'm not too up on how to do that). Let me know if you're interesting in using or hacking on this idea. Also thinking about how to utilise CodePad if possible.<br />
<br />
Hackers: Christopher Done<br />
<br />
===Cabal===<br />
[http://hackage.haskell.org/trac/hackage/wiki Cabal] just recently i had to implement a minimal packaging system for my work. for some of the tasks it was convenient to reuse some of the cabal features. so i just stumbled across a post from duncan from last year ([http://www.haskell.org/pipermail/cabal-devel/2009-January/004548.html post from duncan]) trying to find developers interested in helping with cabal. don't know if anybody wants to do some work on that but if there is i'd be up for it.<br />
<br />
Hackers: Oliver Mueller, Simon Hengel<br />
<br />
===symhs===<br />
[http://code.google.com/p/sympy/ sympy] is a very good and easy to use symbolic math package for python. We would like to create something similar in Haskell. Of course the time will be limited, so we will try to concentrate on something minimal which is already useful.<br />
<br />
Hackers: Mihaly Barasz, Gergely Risko<br />
<br />
=== Tunskell ===<br />
<br />
[http://bitbucket.org/danderson/tunskell A VPN mesh daemon] written in Haskell. Among other things, it implements an IP routing engine, the BGP dynamic routing protocol, and the results so far show that it's smoking fast at what it does.<br />
<br />
The code is still under heavy construction. The goal for the hackathon is to finish the BGP portion of the code, hooking up a routing table using that BGP code, and get multiple routers communicating and routing between each other, with some QuickCheck and Criterion thrown in. Other possible tasks are adding transport security (authentication + crypto between peers), peer management (disconnect/reconnect handling), handling network timeouts, and figuring out how to do configuration and hot configuration reloading.<br />
<br />
Since the aim is partially to dispel the myth that Haskell can't be used for I/O heavy real world code, help on improving the performance of the code is most welcome.<br />
<br />
Hackers: David Anderson<br />
<br />
=== HOC ===<br />
<br />
The [http://code.google.com/p/hoc/ Haskell Objective C-Bridge] (HOC) currently does not work out-of-the box on latest ghc/cabal. We want to fix this, work on [http://hackage.haskell.org/trac/hackage/ticket/188 cabal support for building Objective C modules], and eventually see if it is possible to get HOC on hackage.<br />
<br />
Hackers: Benedikt Huber, David Markvica<br />
<br />
=== Haskell Platform ===<br />
<br />
Time to release the [http://haskell.org/platform/ Haskell Platform]<br />
<br />
Hackers: Don<br />
<br />
=== Email ===<br />
<br />
A library for sending emails via SMTP or `sendmail`. In the future the email library should be extended to include parsing and generating of emails, reading mboxes and maildirs or connecting to IMAP and POP servers.<br />
<br />
Hackers: Gero Kriependorf, Dirk Spöri, Johannes Weiss, <br />
<br />
=== Data.Category ===<br />
<br />
An implementation of [http://hackage.haskell.org/package/data-category/ restricted categories]. It contains categorical functors which support the identity functor and functor composition without needing newtype wrappers.<br />
<br />
Hackers: Sjoerd Visscher<br />
<br />
== Experience ==<br />
<br />
Please list projects with which you are familiar. This way, people know whom to contact for more information or guidance on a particular project.<br />
<br />
{| class="wikitable"<br />
! Name<br />
! Projects<br />
|-<br />
| tibbe<br />
| [http://github.com/tibbe/event event], [http://github.com/tibbe/hyena Hyena], and general networking/HTTP<br />
|-<br />
| chrisdone<br />
| Hacked on/worked on: libgd, hsql, fast/cgi, formlets, json, fdo-notify, mueval, lambdabot, wordcloud, goa, tryhaskell<br />
|-<br />
| coeus<br />
| Network.Socket, binary+cereal; NFSv3 protocol, RS-Codes, have been working with multiple different interacting threads (i.e. combined with single-threaded GUIs, NFS-proxy)<br />
|-<br />
|chriseidhof<br />
| formlets, sphinx, Basil, regular-web, regular, fclabels.<br />
|-<br />
|JedBrown<br />
| distributed memory parallelism, numerical analysis, [http://hackage.haskell.org/package/fft fft]<br />
|-<br />
|SebastiaanVisser<br />
| salvia: websockets, inter-process sessions, more flexible user managent, http-ranges, more abstract api and more. [http://github.com/sebastiaanvisser/salvia-extras (github)]<br />
|-<br />
|DavidAnderson<br />
| Used: FFI, Network, STM; modest hacking on Attoparsec.<br />
|}</div>Sjoerd visscherhttps://wiki.haskell.org/ZuriHac2010/ProjectsZuriHac2010/Projects2010-03-20T08:45:00Z<p>Sjoerd visscher: </p>
<hr />
<div>== Generic information ==<br />
<br />
You can apply for an account and a project using<br />
[http://community.haskell.org/admin/ the community server].<br />
<br />
Once you have an account and/or a project, you upload a Darcs repository as follows. First, initialize your repository on the server:<br />
<br />
$ ssh community.haskell.org<br />
you@haskell:~$ cd /srv/code/yourproject<br />
you@haskell:/srv/code/yourproject$ darcs init<br />
<br />
Then, log out and push your repository:<br />
<br />
$ darcs push community.haskell.org:/srv/code/yourproject<br />
<br />
== Projects ==<br />
<br />
If you have a project that you want to work on at the Hackathon, please describe it here.<br />
<br />
Since Hackathons are great for teamwork, consider joining one of the projects mentioned below. If you're interested in one of these projects, add your name to the list of hackers under that project.<br />
<!-- Copy this template<br />
=== Project name ===<br />
<br />
I am a project. Love me.<br />
<br />
Hackers: Hacker 1, Hacker 2<br />
--><br />
<br />
=== Darcs ===<br />
<br />
A large chunk of the Darcs team will be at ZuriHac. We would be delighted for you to join in and do some hacking with us. To help you get started, we have a big list of ProbablyEasy bugs to chew on. See our [http://wiki.darcs.net/Sprints/2010-03 sprint page] for more details!<br />
<br />
Hackers: Florent Becker, Guillaume Hoffmann, Eric Kow, Reinier Lamers, Petr Rockai, Ganesh Sittampalam and more...<br />
<br />
=== DPM (Darcs Patch Manager) ===<br />
<br />
The Darcs Patch Manager (DPM for short) is a tool that simplifies working with darcs. It is most effective when used in an environment where developers do not push their patches directly to the main repository but where patches undergo a reviewing process before they are actually applied. See http://www.factisresearch.com/2010/03/dpm/ for a short tutorial.<br />
<br />
At the hackathon, we would like to add support for detecting conflicts between patches to the DPM. Some help from the darcs hackers on ideas how this feature could be realized would be great! Also, the integration with darcs is quite fragile, so we would also appreciate feedback from darcs hackers here.<br />
<br />
Here are some ideas:<br />
<br />
* Track conflicts. DPM should be aware of conflicts between two patches and between a patch and the current state of the repo.<br />
* Diff between two patches in the same patch group.<br />
* Improved apply command. DPM should select automatically the patch to apply instead of relying on darcs' interactive apply command<br />
* Proper configuration file. At the moment, DPM relies exclusively on commandline arguments for customization.<br />
* Some more patch states could be useful: DISCUSSION (similar to UNDECIDED but already reviewed and awaiting feedback from the patch developer), UNAPPLICABLE, ACCEPTED (ready to be applied but still unapplied). We should discuss which of these states are really needed and which can already be represented through the existing states + comments + the reviewed flag.<br />
* The review command should offer the possibility to apply the patch directly to the repo. Something dialog like this would be cool:<br />
<br />
What should I do with this patch?<br />
a) accept<br />
r) reject<br />
d) discard<br />
w) wait<br />
s) send review to author and wait<br />
<br />
* Support for transitive dependencies<br />
* Readline support<br />
* Cleanup command (remove closed patch groups from the DB)<br />
* Automatize interactive tests. DPM is lacking a good test suite. Often, I test DPM interactively by executing a series of shell commands and checking that the output is correct. It would be nice if we could record the shell commands and their output (the script tool could be useful here), so that we could replay them later.<br />
* Bounce patch via email.<br />
* Webfrontend for 'dpm list'<br />
<br />
Hackers: Stefan Wehr<br />
<br />
=== Need for speed ===<br />
<br />
In 2006 the Python community had a [http://wiki.python.org/moin/NeedForSpeed NeedForSpeed sprint]. Some Haskell libraries, like the containers library, could use some benchmarks (using e.g. [http://hackage.haskell.org/package/criterion Criterion]) and hopefully some performance improvements.<br />
<br />
=== event ===<br />
<br />
The [http://github.com/tibbe/event event library] will hopefully replace GHC's I/O manager with a more scalable implementation, based on better data structures and more efficient system calls (e.g. epoll/kqueue).<br />
<br />
The project is nearing completion, but more testing and benchmarking is needed. The code also needs to be merged into GHC.<br />
<br />
Hackers: Johan Tibell<br />
<br />
=== Data.Binary on continuations ===<br />
<br />
The [http://code.haskell.org/binary/ Data.Binary library] provides blazing fast reading/writing of binary data. There are a few things I'd like to see improved, hopefully before inclusion in the [http://hackage.haskell.org/platform/ Haskell Platform]:<br />
<br />
* It's not possible to use the library on large inputs without resorting to lazy I/O. By changing the underlying implementation to use continuations and expose a continuations based API we can process large inputs without resorting to unsafe operations. This needs to be done while still offering good performance.<br />
* The library lacks error handling. The above implementation would naturally support communicating errors to the user. There are however other ways to achieve the same result.<br />
* The library currently includes two separate features in one package, low-level binary parsing of simple types (e.g. Ints and Words) and a data format (the Binary typeclass). Arguably the library should be split in two.<br />
* The binary data format should be documented and it should be clear which types are guaranteed to have the same encoding for the foreseeable future.<br />
<br />
Hackers: Johan Tibell, Christophe Poucet, Marc A. Ziegert, Lennart Kolmodin<br />
<br />
Comment by Jürgen "Jutaro" Nicklisch: I've hacked an addition package to binary: [http://hackage.haskell.org/package/binary-shared binary-shared], which gives sharing of data for serialization and deserialization. For my app this gives a huge saving of space and time and I think it would be reasonable to integrate this into the binary package. <br />
<br />
Comment by David Anderson: A good place to start for switching to CPS might be Attoparsec. The internals are very fast, and could probably make it into Binary.Get easily.<br />
<br />
Comment by Lennart Kolmodin: I've got a CPS based version of binary working at <br />
http://haskell.org/~kolmodin/code/binary-push/ The Data.Binary.Get has been rewritten, some functions are still missing from the original API.<br />
<br />
=== Adaptable containers ===<br />
<br />
Scala's collection library was [http://www.scala-lang.org/node/2060 completely overhauled] in 2.8. The [http://hackage.haskell.org/package/containers containers library] is a bit dated. There are several things that could be done:<br />
<br />
* Write a new library based on associate data types, yielding performance improvements.<br />
* Write more tests and add some [http://hackage.haskell.org/package/criterion Criterion] benchmarks.<br />
* Consolidate API naming, exported functions, etc.<br />
<br />
Hackers: Christophe Poucet <br />
<br />
=== Leksah ===<br />
<br />
I will work on Leksah and help is needed and welcome<br />
<br />
* Packaging for Debian/Ubuntu<br />
* Editor for Cabal files with configurations<br />
* Concept for Plugins/Extensions<br />
* Fixing bugs<br />
* ...<br />
<br />
Hackers: Jürgen Nicklisch<br />
<br />
=== arbtt ===<br />
<br />
The automatic rule based time tracker needs some love. Possible projects are <br />
<br />
* Graphical statistics<br />
* Export to hamster db (they have nice statistics)<br />
* More powerful date/time manipulation rules (including type inference and good error messages)<br />
* Performance improvements<br />
* ...<br />
<br />
Hackers: Joachim “nomeata” Breitner, Martin Kiefel<br />
<br />
=== loker ===<br />
<br />
Loker is:<br />
* library for parsing (POSIX) UNIX Shell scripts<br />
* program for static analysis of Shell scripts<br />
* compiler for Shell scripts<br />
* whatever you can imagine related to Shell scripts.<br />
<br />
Currently the parser part is almost done. See [http://github.com/feuerbach/loker githug repository].<br />
<br />
I am happy to see anyone interested in the project, please contact [http://ro-che.info/ me].<br />
<br />
Hackers: Roman Cheplyaka<br />
<br />
=== JPEG-decoder ===<br />
<br />
Package stb-image contains a JPEG-decoding function, but it is a wrapper around a C function. Obviously, it is not the Haskell spirit to let C do the dirty work!<br />
<br />
I once wrote a JPEG-decoder purely in Haskell. It is optimized for readability rather than speed.<br />
During the Hackathon, I want to: <br />
* package it under Cabal<br />
* try and optimize it (using bytestreams (or bitstreams?))<br />
* see whether it competes with the C implementation...<br />
Help of hackers who know bytestreams is appreciated (you don't need knowledge of JPEG to participate in this project).<br />
<br />
Hackers: Jeroen Fokker.<br />
<br />
=== hledger ===<br />
[http://hledger.org/ Hledger] is a personal finance manager. Hackers are welcome! Hledger's author Simon Michael will be (remotely) with us.<br />
<br />
Tasks:<br />
# Readline-like interface in "hledger add", perhaps using shellac <br />
# Embedded calculator into "hledger add"<br />
# Exporting data to R<br />
# Improve hledger as a library. Design good API<br />
# Also see ideas [http://groups.google.com/group/hledger/msg/9827288df3e5bf51 here]; feel free to add them to this list if you are going to hack on them<br />
<br />
Hackers: Roman Cheplyaka<br />
<br />
=== BlazeHtml ===<br />
There are several HTML combinator libraries on hackage, but we still need one that is *really* fast. This is attempt to tackle the problem [http://hackage.haskell.org/trac/summer-of-code/ticket/1580 described here]. A simple API proposal can be found [http://gist.github.com/332603 here], and the corresponding github repo [http://github.com/jaspervdj/BlazeHtml is here]. Everyone is welcome to hack on this (new) project, if you're interested please contact [http://jaspervdj.be/contact.html me].<br />
<br />
Hackers: Jasper Van der Jeugt, Simon Meier, Christopher Done(?)<br />
<br />
* I'm interested in this -- I've forked your github gist. Do you want to start a proper project that we can fork? I'll try to come up with some Criterion tests and QuickCheck properties. I'm interested in adding a type-safe layer which may require some newtypes. Criterion will help determine how detrimental this is to speed and space. ---- [[User:Chrisdone|Chrisdone]] 22:17, 15 March 2010 (UTC)<br />
<br />
=== Pesto ===<br />
I will be working on the Pesto web framework. Rather than a regular framework, it is a collection of orthogonal modules for the model, view and controller part. I will try to release the [http://github.com/chriseidhof/regular-web regular-web] package and possibly work on the [http://github.com/chriseidhof/Basil Basil] library.<br />
<br />
Hackers: Chris Eidhof, Christopher Done(?)<br />
<br />
===Sirenial===<br />
[http://code.google.com/p/sirenial/ Sirenial] is a type-safe SQL wrapper. Compared to HaskellDB it uses simpler types and is able to automatically and transparently merge similar SELECT queries. During the Hackathon I will aim to bring the project to a usable state and release a first version on Hackage.<br />
<br />
Hackers: Martijn van Steenbergen<br />
<br />
=== UHC ===<br />
We will work on library support (Cabal, FFI) for UHC.<br />
There are many other projects, work in progress, etc, so just ask us if you want<br />
to work on a UHC related project or just are interested to know a bit more about its internals.<br />
<br />
Hackers: Atze Dijkstra, Andres L&ouml;h, Jeroen Fokker<br />
<br />
=== Testable Documentation ===<br />
I'll work on testable documentation. There is still some work to be done on [http://hackage.haskell.org/package/DocTest DocTest] (e. g. integration with Haddock, support for QuickCheck properties). An other idea is to define some format for tutorials, that allows us to verify that given Examples do actually work. Please drop me some lines (simon hengel at wiktory org), if you are interested in the topic.<br />
<br />
'''Update:''' I plan to finish DocTest integration with Haddock and then spend the rest of the weekend on Cabal. If you are interested in testable documentation or if you have any ideas, I would still like to chat with you;)<br />
<br />
Hackers: Simon Hengel<br />
<br />
=== Histories on data types ===<br />
I'm going to be working on a seamlessly extending ADTs with histories and lifting functions on those ADTs to properly extend the histories. Things I'll probably spend time on: trying to find a clean SYB formulation for this, and extending the Diff library on Hackage to work on ByteString and Text.<br />
<br />
Hackers: Fred Ross<br />
<br />
=== Haskell eval/type-checker/smallchecker as a RESTful service ===<br />
Considering hacking more on the libraries behind TryHaskell as a service for checking small chunks of code -- similar to CodePad but as a RESTful service callable from JavaScript. This could be used on tutorials and online books such as Learn You A Haskell for testing code samples and interactive exercises (e.g. using smallcheck to check correctness of exercise answers). I envisage blog posts showing snippets that one can run in-page. It's currently on my home computer but I have set a Linode VPS for this purpose (it could also work with multiple hosts although I'm not too up on how to do that). Let me know if you're interesting in using or hacking on this idea. Also thinking about how to utilise CodePad if possible.<br />
<br />
Hackers: Christopher Done<br />
<br />
===Cabal===<br />
[http://hackage.haskell.org/trac/hackage/wiki Cabal] just recently i had to implement a minimal packaging system for my work. for some of the tasks it was convenient to reuse some of the cabal features. so i just stumbled across a post from duncan from last year ([http://www.haskell.org/pipermail/cabal-devel/2009-January/004548.html post from duncan]) trying to find developers interested in helping with cabal. don't know if anybody wants to do some work on that but if there is i'd be up for it.<br />
<br />
Hackers: Oliver Mueller, Simon Hengel<br />
<br />
===symhs===<br />
[http://code.google.com/p/sympy/ sympy] is a very good and easy to use symbolic math package for python. We would like to create something similar in Haskell. Of course the time will be limited, so we will try to concentrate on something minimal which is already useful.<br />
<br />
Hackers: Mihaly Barasz, Gergely Risko<br />
<br />
=== Tunskell ===<br />
<br />
[http://bitbucket.org/danderson/tunskell A VPN mesh daemon] written in Haskell. Among other things, it implements an IP routing engine, the BGP dynamic routing protocol, and the results so far show that it's smoking fast at what it does.<br />
<br />
The code is still under heavy construction. The goal for the hackathon is to finish the BGP portion of the code, hooking up a routing table using that BGP code, and get multiple routers communicating and routing between each other, with some QuickCheck and Criterion thrown in. Other possible tasks are adding transport security (authentication + crypto between peers), peer management (disconnect/reconnect handling), handling network timeouts, and figuring out how to do configuration and hot configuration reloading.<br />
<br />
Since the aim is partially to dispel the myth that Haskell can't be used for I/O heavy real world code, help on improving the performance of the code is most welcome.<br />
<br />
Hackers: David Anderson<br />
<br />
=== HOC ===<br />
<br />
The [http://code.google.com/p/hoc/ Haskell Objective C-Bridge] (HOC) currently does not work out-of-the box on latest ghc/cabal. We want to fix this, work on [http://hackage.haskell.org/trac/hackage/ticket/188 cabal support for building Objective C modules], and eventually see if it is possible to get HOC on hackage.<br />
<br />
Hackers: Benedikt Huber, David Markvica<br />
<br />
=== Haskell Platform ===<br />
<br />
Time to release the [http://haskell.org/platform/Haskell Platform]<br />
<br />
Hackers: Don<br />
<br />
=== Email ===<br />
<br />
A library for sending emails via SMTP or `sendmail`. In the future the email library should be extended to include parsing and generating of emails, reading mboxes and maildirs or connecting to IMAP and POP servers.<br />
<br />
Hackers: Gero Kriependorf, Dirk Spöri, Johannes Weiss, <br />
<br />
=== Data.Category ===<br />
<br />
An implementation of restricted categories. It contains categorical functors which support the identity functor and functor composition without needing newtype wrappers.<br />
<br />
Hackers: Sjoerd Visscher<br />
<br />
== Experience ==<br />
<br />
Please list projects with which you are familiar. This way, people know whom to contact for more information or guidance on a particular project.<br />
<br />
{| class="wikitable"<br />
! Name<br />
! Projects<br />
|-<br />
| tibbe<br />
| [http://github.com/tibbe/event event], [http://github.com/tibbe/hyena Hyena], and general networking/HTTP<br />
|-<br />
| chrisdone<br />
| Hacked on/worked on: libgd, hsql, fast/cgi, formlets, json, fdo-notify, mueval, lambdabot, wordcloud, goa, tryhaskell<br />
|-<br />
| coeus<br />
| Network.Socket, binary+cereal; NFSv3 protocol, RS-Codes, have been working with multiple different interacting threads (i.e. combined with single-threaded GUIs, NFS-proxy)<br />
|-<br />
|chriseidhof<br />
| formlets, sphinx, Basil, regular-web, regular, fclabels.<br />
|-<br />
|JedBrown<br />
| distributed memory parallelism, numerical analysis, [http://hackage.haskell.org/package/fft fft]<br />
|-<br />
|SebastiaanVisser<br />
| salvia: websockets, inter-process sessions, more flexible user managent, http-ranges, more abstract api and more. [http://github.com/sebastiaanvisser/salvia-extras (github)]<br />
|-<br />
|DavidAnderson<br />
| Used: FFI, Network, STM; modest hacking on Attoparsec.<br />
|}</div>Sjoerd visscherhttps://wiki.haskell.org/ZuriHac2010/AttendeesZuriHac2010/Attendees2010-03-04T20:16:00Z<p>Sjoerd visscher: </p>
<hr />
<div>This is the attendee list for [[ZuriHac]]. Please refer to the [[ZuriHac|main page]] for more information.<br />
<br />
= Attendees =<br />
<br />
Once you've [[ZuriHac/Register|registered]], please add your name to the following table:<br />
<br />
{| class="wikitable"<br />
! Nickname<br />
! Real Name<br />
! Affiliation<br />
! Mobile #<br />
! email<br />
! Arriving<br />
! Departing<br />
! Accomodation<br />
|-<br />
| coeus<br />
| Marc A. Ziegert<br />
| University of Paderborn<br />
| +49 17 5 6000 700<br />
| coeus-zurihac at padmen.de<br />
| 19 morning<br />
| 21 afternoon<br />
| Youth Hostel Zurich<br />
|-<br />
| Heffalump<br />
| Ganesh Sittampalam<br />
| Credit Suisse (Darcs)<br />
| +447968253467<br />
| <br />
| <br />
| <br />
|-<br />
| tibbe<br />
| Johan Tibell<br />
| Google<br />
| +41787978230<br />
| <br />
| <br />
| <br />
| <br />
|-<br />
| <br />
| Keith Lomax<br />
| <br />
| <br />
| <br />
| <br />
| <br />
| <br />
|-<br />
| sioraiocht<br />
| Tom Harper<br />
| Oxford University Computing Laboratory<br />
| +44 7533 998 591<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
| poucet<br />
| Christophe Poucet<br />
| Google<br />
| +41796691013<br />
| <br />
| <br />
| <br />
| <br />
|-<br />
| zeuxis<br />
| Harald Holtmann<br />
| <br />
| +49 176 22053266<br />
| <br />
| <br />
| <br />
| <br />
|-<br />
| rmies<br />
| Michel Rijnders<br />
| TTY (Amsterdam)<br />
| +31646442127<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
| <br />
| Simon Meier<br />
| ETH Zurich<br />
| <br />
| <br />
|<br />
|<br />
|<br />
|-<br />
| Gh_<br />
| Guillaume Hoffmann<br />
| (Darcs)<br />
| <br />
|<br />
| 19 morning<br />
| 21 afternoon<br />
|<br />
|-<br />
| jnwhiteh<br />
| Jim Whitehead<br />
| Oxford University Computing Laboratory<br />
| +44 7846 257 133<br />
| <br />
| <br />
|<br />
| <br />
|-<br />
| kolmodin<br />
| Lennart Kolmodin<br />
| Västra Götalandsregionen<br />
| +46 73 6223606<br />
| <br />
| <br />
|<br />
| <br />
|-<br />
| madhadron<br />
| Frederick Ross<br />
| Ecole Polytechnique Federale de Lausanne<br />
| +41 79 710 02 11<br />
| madhadron at gmail dot com<br />
| <br />
|<br />
|<br />
|-<br />
| al-maisan<br />
| Muharem Hrnjadovic<br />
| <br />
| +49 (1577) 470-3749<br />
| <br />
|19 morning<br />
|21 afternoon<br />
|Hotel Neufeld, Friesenbergstraße 15<br />
|-<br />
| beschmi<br />
| Benedikt Schmidt<br />
| ETH Zurich (Darcs)<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| chr1s<br />
| Chris Eidhof<br />
| Tupil / Utrecht University<br />
| +31628887656<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
|<br />
| Martijn van Steenbergen<br />
| Utrecht University<br />
| <br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| hesselink<br />
| Erik Hesselink<br />
| typLAB<br />
| +31650994887<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
| sfvisser<br />
| Sebastiaan Visser<br />
| typLAB / Utrecht University<br />
| +31624828951<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
|<br />
| Tom Lokhorst<br />
| Utrecht University<br />
| <br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| sjoerd_visscher<br />
| Sjoerd Visscher<br />
| Xopus<br />
| <br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| kosmikus<br />
| Andres L&ouml;h<br />
| Utrecht University<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| smurfpje<br />
| Clara L&ouml;h<br />
| Universit&auml;t G&ouml;ttingen<br />
|<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
| nomeata<br />
| Joachim Breitner<br />
|<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| kowey<br />
| Eric Kow<br />
| University of Brighton (Darcs)<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
|<br />
| Simon Hengel<br />
| Spin AG<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| leather<br />
| Sean Leather<br />
| Utrecht University<br />
| +31616158163<br />
| <br />
|<br />
| <br />
|<br />
|-<br />
|<br />
| Dirk Spöri<br />
| factis research GmbH<br />
|<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
|<br />
| Harald Fischer<br />
| factis research GmbH<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
|<br />
| Johannes Weiss<br />
| factis research GmbH<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
|<br />
| Gero Kriependorf<br />
| factis research GmbH<br />
| <br />
|<br />
|<br />
|<br />
|<br />
|-<br />
|<br />
| Stefan Wehr<br />
| factis research GmbH<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
|<br />
| David Leuschner<br />
| factis research GmbH<br />
|<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
|<br />
| Steven Keuchel<br />
| Utrecht University<br />
| +31644053336<br />
|<br />
|<br />
| <br />
|<br />
|-<br />
| dcoutts<br />
| Duncan Coutts<br />
| Well-Typed LLP<br />
| <br />
| <br />
| <br />
| <br />
|<br />
|-<br />
| tux_rocker<br />
| Reinier Lamers<br />
| (Darcs)<br />
| <br />
|<br />
| 18 night<br />
| 21 night<br />
|<br />
|-<br />
| jutaro<br />
| Jürgen Nicklisch-Franken<br />
| ICS AG<br />
| <br />
| <br />
| <br />
|<br />
|<br />
|-<br />
| dons<br />
| Don Stewart<br />
| Galois, Inc<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| gal_bolle<br />
| Florent Becker<br />
| Université d'Orléans (Darcs)<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| ErrGe<br />
| Gergely Risko<br />
| Nokia<br />
| +358504899477<br />
| <br />
| 19 noon<br />
| 22 noon<br />
|<br />
|-<br />
| HugoDaniel<br />
| Hugo Daniel<br />
| New University of Lisbon (UNL)<br />
| <br />
| <br />
| 18 night<br />
| 22 morning<br />
|<br />
|-<br />
| <br />
| Atze Dijkstra<br />
| Utrecht University<br />
| <br />
| <br />
| <br />
|<br />
| <br />
|-<br />
| <br />
| Jeroen Fokker<br />
| Utrecht University<br />
| +31644350198<br />
| <br />
| <br />
|<br />
| <br />
|-<br />
| <br />
| Petr Rockai<br />
| (Darcs)<br />
| <br />
| <br />
| <br />
| <br />
|<br />
|-<br />
| <br />
| Nikolas Mayr<br />
| University of Paderborn<br />
| +49 170 5448278<br />
| <br />
| 19 morning<br />
| 21 afternoon<br />
| Youth Hostel Zurich<br />
|-<br />
|<br />
| Sergey Astanin<br />
| Politecnico di Torino<br />
| +39 333 952 0878<br />
| <br />
|<br />
|<br />
| <br />
|-<br />
|<br />
| Bartek Wojcik<br />
| <br />
| <br />
| <br />
| <br />
| <br />
| <br />
|-<br />
|<br />
| Dragos Ionita<br />
| Utrecht University<br />
| +31 644 044 688<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| jaspervdj<br />
| Jasper Van der Jeugt<br />
| Ghent University<br />
| <br />
|<br />
|<br />
|<br />
| City Backpacker<br />
|-<br />
| chrisdone<br />
| Chris Done<br />
| <br />
| +447977688050<br />
| chrisdone@gmail.com<br />
| 19 morning<br />
| 21 afternoon<br />
| TBA<br />
|}<br />
<br />
= Additional Comments =<br />
<br />
Please use this section to leave comments for other attendees, e.g. for organizing accommodation.</div>Sjoerd visscherhttps://wiki.haskell.org/ZuriHac2010/AttendeesZuriHac2010/Attendees2010-03-04T20:15:30Z<p>Sjoerd visscher: </p>
<hr />
<div>This is the attendee list for [[ZuriHac]]. Please refer to the [[ZuriHac|main page]] for more information.<br />
<br />
= Attendees =<br />
<br />
Once you've [[ZuriHac/Register|registered]], please add your name to the following table:<br />
<br />
{| class="wikitable"<br />
! Nickname<br />
! Real Name<br />
! Affiliation<br />
! Mobile #<br />
! email<br />
! Arriving<br />
! Departing<br />
! Accomodation<br />
|-<br />
| coeus<br />
| Marc A. Ziegert<br />
| University of Paderborn<br />
| +49 17 5 6000 700<br />
| coeus-zurihac at padmen.de<br />
| 19 morning<br />
| 21 afternoon<br />
| Youth Hostel Zurich<br />
|-<br />
| Heffalump<br />
| Ganesh Sittampalam<br />
| Credit Suisse (Darcs)<br />
| +447968253467<br />
| <br />
| <br />
| <br />
|-<br />
| tibbe<br />
| Johan Tibell<br />
| Google<br />
| +41787978230<br />
| <br />
| <br />
| <br />
| <br />
|-<br />
| <br />
| Keith Lomax<br />
| <br />
| <br />
| <br />
| <br />
| <br />
| <br />
|-<br />
| sioraiocht<br />
| Tom Harper<br />
| Oxford University Computing Laboratory<br />
| +44 7533 998 591<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
| poucet<br />
| Christophe Poucet<br />
| Google<br />
| +41796691013<br />
| <br />
| <br />
| <br />
| <br />
|-<br />
| zeuxis<br />
| Harald Holtmann<br />
| <br />
| +49 176 22053266<br />
| <br />
| <br />
| <br />
| <br />
|-<br />
| rmies<br />
| Michel Rijnders<br />
| TTY (Amsterdam)<br />
| +31646442127<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
| <br />
| Simon Meier<br />
| ETH Zurich<br />
| <br />
| <br />
|<br />
|<br />
|<br />
|-<br />
| Gh_<br />
| Guillaume Hoffmann<br />
| (Darcs)<br />
| <br />
|<br />
| 19 morning<br />
| 21 afternoon<br />
|<br />
|-<br />
| jnwhiteh<br />
| Jim Whitehead<br />
| Oxford University Computing Laboratory<br />
| +44 7846 257 133<br />
| <br />
| <br />
|<br />
| <br />
|-<br />
| kolmodin<br />
| Lennart Kolmodin<br />
| Västra Götalandsregionen<br />
| +46 73 6223606<br />
| <br />
| <br />
|<br />
| <br />
|-<br />
| madhadron<br />
| Frederick Ross<br />
| Ecole Polytechnique Federale de Lausanne<br />
| +41 79 710 02 11<br />
| madhadron at gmail dot com<br />
| <br />
|<br />
|<br />
|-<br />
| al-maisan<br />
| Muharem Hrnjadovic<br />
| <br />
| +49 (1577) 470-3749<br />
| <br />
|19 morning<br />
|21 afternoon<br />
|Hotel Neufeld, Friesenbergstraße 15<br />
|-<br />
| beschmi<br />
| Benedikt Schmidt<br />
| ETH Zurich (Darcs)<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| chr1s<br />
| Chris Eidhof<br />
| Tupil / Utrecht University<br />
| +31628887656<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
|<br />
| Martijn van Steenbergen<br />
| Utrecht University<br />
| <br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| hesselink<br />
| Erik Hesselink<br />
| typLAB<br />
| +31650994887<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
| sfvisser<br />
| Sebastiaan Visser<br />
| typLAB / Utrecht University<br />
| +31624828951<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
|<br />
| Tom Lokhorst<br />
| Utrecht University<br />
| <br />
|<br />
| <br />
|<br />
|<br />
|-<br />
|<br />
| Sjoerd Visscher<br />
| Xopus<br />
| <br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| kosmikus<br />
| Andres L&ouml;h<br />
| Utrecht University<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| smurfpje<br />
| Clara L&ouml;h<br />
| Universit&auml;t G&ouml;ttingen<br />
|<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
| nomeata<br />
| Joachim Breitner<br />
|<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| kowey<br />
| Eric Kow<br />
| University of Brighton (Darcs)<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
|<br />
| Simon Hengel<br />
| Spin AG<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| leather<br />
| Sean Leather<br />
| Utrecht University<br />
| +31616158163<br />
| <br />
|<br />
| <br />
|<br />
|-<br />
|<br />
| Dirk Spöri<br />
| factis research GmbH<br />
|<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
|<br />
| Harald Fischer<br />
| factis research GmbH<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
|<br />
| Johannes Weiss<br />
| factis research GmbH<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
|<br />
| Gero Kriependorf<br />
| factis research GmbH<br />
| <br />
|<br />
|<br />
|<br />
|<br />
|-<br />
|<br />
| Stefan Wehr<br />
| factis research GmbH<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
|<br />
| David Leuschner<br />
| factis research GmbH<br />
|<br />
| <br />
|<br />
|<br />
|<br />
|-<br />
|<br />
| Steven Keuchel<br />
| Utrecht University<br />
| +31644053336<br />
|<br />
|<br />
| <br />
|<br />
|-<br />
| dcoutts<br />
| Duncan Coutts<br />
| Well-Typed LLP<br />
| <br />
| <br />
| <br />
| <br />
|<br />
|-<br />
| tux_rocker<br />
| Reinier Lamers<br />
| (Darcs)<br />
| <br />
|<br />
| 18 night<br />
| 21 night<br />
|<br />
|-<br />
| jutaro<br />
| Jürgen Nicklisch-Franken<br />
| ICS AG<br />
| <br />
| <br />
| <br />
|<br />
|<br />
|-<br />
| dons<br />
| Don Stewart<br />
| Galois, Inc<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| gal_bolle<br />
| Florent Becker<br />
| Université d'Orléans (Darcs)<br />
|<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| ErrGe<br />
| Gergely Risko<br />
| Nokia<br />
| +358504899477<br />
| <br />
| 19 noon<br />
| 22 noon<br />
|<br />
|-<br />
| HugoDaniel<br />
| Hugo Daniel<br />
| New University of Lisbon (UNL)<br />
| <br />
| <br />
| 18 night<br />
| 22 morning<br />
|<br />
|-<br />
| <br />
| Atze Dijkstra<br />
| Utrecht University<br />
| <br />
| <br />
| <br />
|<br />
| <br />
|-<br />
| <br />
| Jeroen Fokker<br />
| Utrecht University<br />
| +31644350198<br />
| <br />
| <br />
|<br />
| <br />
|-<br />
| <br />
| Petr Rockai<br />
| (Darcs)<br />
| <br />
| <br />
| <br />
| <br />
|<br />
|-<br />
| <br />
| Nikolas Mayr<br />
| University of Paderborn<br />
| +49 170 5448278<br />
| <br />
| 19 morning<br />
| 21 afternoon<br />
| Youth Hostel Zurich<br />
|-<br />
|<br />
| Sergey Astanin<br />
| Politecnico di Torino<br />
| +39 333 952 0878<br />
| <br />
|<br />
|<br />
| <br />
|-<br />
|<br />
| Bartek Wojcik<br />
| <br />
| <br />
| <br />
| <br />
| <br />
| <br />
|-<br />
|<br />
| Dragos Ionita<br />
| Utrecht University<br />
| +31 644 044 688<br />
|<br />
| <br />
|<br />
|<br />
|-<br />
| jaspervdj<br />
| Jasper Van der Jeugt<br />
| Ghent University<br />
| <br />
|<br />
|<br />
|<br />
| City Backpacker<br />
|-<br />
| chrisdone<br />
| Chris Done<br />
| <br />
| +447977688050<br />
| chrisdone@gmail.com<br />
| 19 morning<br />
| 21 afternoon<br />
| TBA<br />
|}<br />
<br />
= Additional Comments =<br />
<br />
Please use this section to leave comments for other attendees, e.g. for organizing accommodation.</div>Sjoerd visscherhttps://wiki.haskell.org/Hac5/DinnerHac5/Dinner2009-04-19T15:29:24Z<p>Sjoerd visscher: </p>
<hr />
<div>== Dinner ==<br />
<br />
For sunday night, we will order asian food.<br />
<br />
Order before 18:00!<br />
<br />
== Options ==<br />
<br />
See http://tinyurl.com/hac5dinner<br />
<br />
For each meal you also have to choose whether you'd have white rice, nasi, bami, vegetarian nasi, vegetarian bami.<br />
<br />
== The List ==<br />
<br />
{| class="wikitable"<br />
! Name <br />
! Choice (number)<br />
! Rice/nasi/bami<br />
|-<br />
| David Himmelstrup<br />
| 700<br />
| Rice<br />
|-<br />
| Erik Hesselink<br />
| 701<br />
| nasi<br />
|-<br />
| Sebastiaan Visser<br />
| 704<br />
| nasi<br />
|-<br />
| Reinier Lamers<br />
| 57<br />
|-<br />
| Rui Barbosa<br />
| 701<br />
| nasi<br />
|-<br />
| Sjoerd Visscher<br />
| 707<br />
| bami<br />
|}</div>Sjoerd visscherhttps://wiki.haskell.org/Hac5/ProjectsHac5/Projects2009-03-29T17:17:00Z<p>Sjoerd visscher: </p>
<hr />
<div>== Generic information ==<br />
<br />
You can apply for an account and a project using<br />
[http://community.haskell.org/admin/ the community server].<br />
<br />
Once you have an account and/or a project, you upload a Darcs repository as follows. First, initialize your repository on the server:<br />
<br />
$ ssh community.haskell.org<br />
you@haskell:~$ cd /srv/code/yourproject<br />
you@haskell:/srv/code/yourproject$ darcs init<br />
<br />
Then, log out and push your repository:<br />
<br />
$ darcs push community.haskell.org:/srv/code/yourproject<br />
<br />
== Projects ==<br />
<br />
If you have a project that you want to work on at the Hackathon, please describe it here.<br />
<br />
Since Hackathons are great for teamwork, consider joining one of the projects mentioned below. If you're interested in one of these projects, add your name to the list of hackers under that project.<br />
<!-- Copy this template<br />
=== Project name ===<br />
<br />
==== Description ====<br />
<br />
I am a project. Love me.<br />
<br />
===== Hackers =====<br />
<br />
* Hacker 1<br />
* Hacker 2<br />
--><br />
<br />
=== Darcs Sprint #2 ===<br />
<br />
==== Description ====<br />
<br />
The [http://wiki.darcs.net/index.html/Sprints/2009-04 second Darcs Sprint]. Help improve our beloved [http://en.wikipedia.org/wiki/Distributed_revision_control DVCS]! Add your nick to the list.<br />
<br />
==== Hackers ====<br />
<br />
* Reinier Lamers (tux_rocker)<br />
* Eric Kow (kowey)<br />
* Ben Moseley (benmos)<br />
* Ganesh Sittampalam (Heffalump)<br />
<br />
=== Grapefruit ===<br />
<br />
==== Description ====<br />
<br />
[[Grapefruit]] is a library for [[Functional Reactive Programming]] (FRP) with a focus on user interfaces. FRP makes it possible to implement reactive and interactive systems in a declarative style. With Grapefruit, user interfaces are described as networks of communicating widgets and windows. Communication is done via different kinds of signals which describe temporal behavior.<br />
<br />
==== Possible subprojects ====<br />
<br />
* graphics support<br />
** Jeff Heard expressed interest in adapting [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Hieroglyph Hieroglyph] to work with Grapefruit.<br />
** The classic version of Grapefruit contains quite a bit of OpenGL-based 3D animation stuff which could be ported to the current Grapefruit version.<br />
** We should also take a look at [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/rsagl RSAGL].<br />
* improvements of the UI part and the GTK+-based UI backend<br />
* Qt-based UI backend<br />
** [[HQK]] should be used for this.<br />
* addition or integration of some kind of physics engine<br />
** There is, for example, [[Hpysics]] from Roman Cheplyaka (Feuerbach)<br />
<br />
==== Licensing ====<br />
<br />
Grapefruit is BSD3-licensed, so all contributions to Grapefruit should be BSD3-licensed, too. If you don’t like this, please discuss this on the [http://projects.haskell.org/cgi-bin/mailman/listinfo/grapefruit Grapefruit mailing list] or contact [[User:Wolfgang Jeltsch|Wolfgang Jeltsch]].<br />
<br />
==== Hackers ====<br />
<br />
* Wolfgang Jeltsch (jeltsch)<br />
* Fraser Wilson<br />
* Roman Cheplyaka (Feuerbach)<br />
* Peter Verswyvelen<br />
* Thomas Davie<br />
<br />
=== Leksah ===<br />
<br />
==== Description ====<br />
<br />
[http://leksah.org leksah] is an attempt to develop a Haskell IDE in Haskell. Help adding cool features to this Wannabee IDE, like:<br />
* Generate export list<br />
* Code Formatter<br />
* Infer types<br />
* ... <br />
<br />
==== Hackers ====<br />
<br />
* Jürgen Nicklisch (jutaro)<br />
<br />
<br />
=== Scion ===<br />
<br />
==== Description ====<br />
<br />
Scion is a library that aims to provide IDE-like functionality on top of the GHC API. It aims to be front-end agnostic, thus serve as a common middle-layer for various Haskell programming frontends like Emacs, Vim, Yi, Eclipse, etc.<br />
<br />
It currently only provides rudimentary functionality, such as loading a project and single-threaded background-typechecking. Currently, Scion's only frontend is Emacs, but a Vim frontend is in the underway. Possible Hackathon projects could be:<br />
<br />
* Extend Scion's capabilities. For example: cross-refs, jump to source, more type information<br />
<br />
* Add another Scion frontend. E.g., hook up Yi or Eclipse with scion <br />
<br />
==== Hackers ====<br />
<br />
* Thomas Schilling (nominolo)<br />
<br />
=== Type class aliases ===<br />
<br />
==== Description ====<br />
<br />
Type class aliases is a much wanted extension to Haskell proposed long ago by John Meacham ([http://repetae.net/recent/out/classalias.html John's website], [http://www.haskell.org/pipermail/haskell/2005-October/thread.html#16590 mailing list]) that has never been implemented yet. It is time this extension sees the light of day!<br />
<br />
GHC will be the target compiler. Perhaps GHC plugins ([http://hackage.haskell.org/trac/ghc/wiki/Plugins GHC wiki], [http://www.haskell.org/sitewiki/images/f/f0/TMR-Issue12.pdf The Monad Reader 12]) are of help here?<br />
<br />
Please have a look at the [[Context alias|context alias wiki page]] and extend it if you can.<br />
<br />
==== Ideas ====<br />
<br />
===== from Martijn van Steenbergen =====<br />
<br />
As a starting point we'll focus on supporting the following syntax:<br />
<br />
class alias FooBar a = (Foo a, Bar a)<br />
<br />
x :: FooBar a => a<br />
x = ...<br />
<br />
===== from Wolfgang Jeltsch =====<br />
<br />
A “class alias” actually doesn’t stand for a class but for a context (or a part of a context). So it might be better to choose a slightly different syntax:<br />
<br />
context Foobar a = (Foo a, Bar a)<br />
<br />
John Meacham proposes the following syntax for class aliases (context aliases) with superclass constraints:<br />
<br />
class alias Num a = Eq a => (Additive a, Multiplicative a)<br />
<br />
This is not consistent with the superclass syntax of class declarations. I think, we should use this syntax:<br />
<br />
class alias Eq a => Num a = (Additive a, Multiplicative a)<br />
<br />
Or better:<br />
<br />
context Eq a => Num a = (Additive a, Multiplicative a)<br />
<br />
==== Hackers ====<br />
<br />
* [[User:MartijnVanSteenbergen|Martijn van Steenbergen]]<br />
* [[User:sjoerd_visscher|Sjoerd Visscher]]<br />
<br />
== Experiences ==<br />
<br />
Please list projects with which you are familiar. This way, people know whom to contact for more information or guidance on a particular project.<br />
<br />
{| class="wikitable"<br />
! Name<br />
! Projects<br />
|-<br />
| leather<br />
| [http://www.cs.uu.nl/wiki/GenericProgramming/EMGM EMGM], [http://www.cs.uu.nl/wiki/GenericProgramming/Multirec multirec]<br />
|-<br />
| jeltsch<br />
| [[Grapefruit]], [[HQK]]<br />
|-<br />
| jutaro<br />
| [http://www.leksah.org leksah]<br />
|-<br />
| sebas<br />
| [http://code.google.com/p/salvia-orchid/ salvia], [http://code.google.com/p/salvia-orchid/ orchid], filestore<br />
|-<br />
| waern<br />
| GHC (front-end), Haddock<br />
|-<br />
| Feuerbach<br />
| [http://xmonad.org xmonad], [[Hpysics]]<br />
|}</div>Sjoerd visscherhttps://wiki.haskell.org/User:Sjoerd_visscherUser:Sjoerd visscher2009-03-29T17:14:57Z<p>Sjoerd visscher: </p>
<hr />
<div>[http://w3future.com/weblog/ My weblog]</div>Sjoerd visscherhttps://wiki.haskell.org/Simonpj/Talk:ListCompSimonpj/Talk:ListComp2007-07-28T09:54:01Z<p>Sjoerd visscher: Added comment</p>
<hr />
<div>= Talk page for "Comprehensive Comprehensions" =<br />
<br />
This is a discussion page for the paper [http://research.microsoft.com/~simonpj/papers/list-comp Comprehensive Comprehensions].<br />
<br />
If you are kind enough to read this paper, you may like to jot down any thoughts it triggers off, and see what others have written. This talk-page lets you do just that. <br />
<br />
You can identify your entries by preceding them with four tildes. Doing so adds your name, and the date. Thus:<br />
<br />
:[[User:Simonpj|Simonpj]] 08:42, 19 April 2007 (UTC) Note from Simon<br />
<br />
If you say who you are in this way, we'll be able to acknowledge your help in a revised version of the paper.<br />
<br />
--------------------------------<br />
<br />
== [[User:MichaelAdams|MichaelAdams]] 14:51, 19 June 2007 (UTC) ==<br />
<br />
In theory these operators (order-by and group-by)<br />
should generalize to monads and once you do<br />
several other design options open up. These two operators could even<br />
be unified into a single operator.<br />
<br />
Starting with sort-by, I think the monadic version is fairly obvious.<br />
Take something like the following code.<br />
<br />
<haskell><br />
do a <- ma<br />
...<br />
b <- mb<br />
c <- mc<br />
sort by (b, c) using foo<br />
d <- md<br />
...<br />
return (a, b, c, d)<br />
</haskell><br />
<br />
It would de-sugar to:<br />
<br />
<haskell><br />
((do a <- ma<br />
...<br />
b <- mb<br />
c <- mc<br />
return ((b, c), (a, b, c))<br />
) `foo` fst) >>= \result -><br />
do let (a, _, _) = result<br />
(_, b, _) = result<br />
(_, _, c) = result<br />
d <- md<br />
...<br />
return (a, b, c, d)<br />
</haskell><br />
<br />
Where we have:<br />
<haskell><br />
foo :: forall a. (a -> t) -> m a -> m a<br />
</haskell><br />
<br />
==== Generalizing Order-by to Group-by ====<br />
In fact after a few tweaks it turns out that order-by and group-by could operate under the exact same de-sugaring.<br />
<br />
Suppose we let the type of foo be:<br />
<haskell><br />
foo :: (Functor n) => forall a. (a -> t) -> m a -> m (n a)<br />
</haskell><br />
Notice that I said "m (n a)" and not "m (m a)". The group-by de-sugaring that I'm going to show works for any Functor "n", and if we imagine "n" to be some type like the following then order-by is just a special case of group-by.<br />
<haskell><br />
type Ident a = a<br />
</haskell><br />
(It wouldn't actually be valid Haskell code to use a type synonym in that way though, but it conveys the idea.)<br />
<br />
The de-sugaring to support this would take something like the following (inspired by arrow syntax).<br />
<br />
<haskell><br />
do a <- ma<br />
b <- mb<br />
c <- mc<br />
foo args $-< (a, b) -- group by (a, b) using (foo args)<br />
g <- mg<br />
return (a, b, c, d, e, f, g)<br />
</haskell><br />
<br />
It would produce:<br />
<br />
<haskell><br />
(ma >>= \a -><br />
mb >>= \b -><br />
mc >>= \c -><br />
return ((a, b), (a, b, c))) `foo` args >>= \result -><br />
let a = fmap (\(_, (a, _, _)) -> a) result<br />
b = fmap (\(_, (_, b, _)) -> b) result<br />
c = fmap (\(_, (_, _, c)) -> c) result in<br />
md >>= \d -><br />
return (a, b, c, d)<br />
</haskell><br />
<br />
(Note that after the "foo", the types of "a", "b" and "c" have changed. Their types before "foo" get wrapped by "n" after "foo".)<br />
<br />
==== Even more generalization ====<br />
<br />
Once we have done this, another possibility opens up.<br />
Notice that the first of each pair in "result" was never used except<br />
from within "foo". It doesn't do any work in the result.<br />
Now suppose we change the type of foo to:<br />
<br />
<haskell><br />
foo :: (Functor n) => forall a. m (t, a) -> m (n (u, a))<br />
</haskell><br />
<br />
Now "foo" can not only read existing bindings from "t", but<br />
it can also create new bindings with "u".<br />
(This hard wires the extraction function to always be "fst",<br />
but it simplifies the presentation a bit.<br />
The other form with a general extraction could still be used.)<br />
<br />
The previous syntax could then be extended to something like:<br />
<br />
<haskell><br />
do a <- ma<br />
b <- mb<br />
c <- mc<br />
(d, e, f) <-$ foo args $-< (a, b)<br />
g <- mg<br />
return (a, b, c, d, e, f, g)<br />
</haskell><br />
<br />
This would then de-sugar to:<br />
<br />
<haskell><br />
(ma >>= \a -><br />
mb >>= \b -><br />
mc >>= \c -><br />
return ((a, b), (a, b, c))) `foo` args >>= \result -><br />
let d = fmap (\((d, _, _), (_, _, _)) -> d) result<br />
e = fmap (\((_, e, _), (_, _, _)) -> e) result<br />
f = fmap (\((_, _, f), (_, _, _)) -> f) result<br />
a = fmap (\((_, _, _), (a, _, _)) -> a) result<br />
b = fmap (\((_, _, _), (_, b, _)) -> b) result<br />
c = fmap (\((_, _, _), (_, _, c)) -> c) result in<br />
mg >>= \g -><br />
return (a, b, c, d, e, f, g)<br />
</haskell><br />
<br />
==== Conclusion ====<br />
<br />
The above might have gone too far down the generalization road and<br />
put to many bells and whistles on the thing,<br />
so it may be worth trimming it down.<br />
I also haven't given any thought to what applications would need this.<br />
I just wanted to consider how far these operations<br />
<br />
--------------------------------<br />
<br />
Just a few little things:<br />
# Page 2, "sortBy is part of the Haskell Prelude" - it's actually in the List module. (I just spotted you've got the same thing in SYB with Class, 7.1)<br />
# The Down trick is very neat, perhaps that should be a part of the standard libraries.<br />
# Page 5, MSFT is in 'quotes', but should be in "quotes".<br />
<br />
Your syntax requires four new keywords, at least one of which is already a standard function (group). Plus with the knowledge of the keywords the parse tree is entirely different. From your paper:<br />
<br />
order by x >= y using takeWhile<br />
<br />
At first reading I parsed >= as the root node, since in Haskell that would be the way it works. Your 'then' syntax in 6.1 seems preferable as it doesn't take any additional keywords.<br />
<br />
--[[User:NeilMitchell|Neil Mitchell]] 16:04, 19 June 2007 (UTC)<br />
------------------------------<br />
The paper also mentions a function "the." I wasn't able to find this function through hoogle or ":t the" in ghci. Perhaps you could add a one line description the way "nub" is described.<br />
<br />
:see section 3.4, its a custom function complete with implementation --[[User:NeilMitchell|Neil Mitchell]] 23:28, 19 June 2007 (UTC)<br />
<br />
::Thanks Neil, I missed it.<br />
<br />
As a non-expert, the sense I get is that whenever I see "by" in a list comprehension, I should expect functions or expressions that operate on lists and not on individual elements of lists.<br />
<br />
When I first started reading the paper, I was going to recommend another extension (for time series) to allow things like moving averages...imagine my surprise when I find exactly the example I was going to suggest :)<br />
[[User:Falcon|Falcon]] 17:10, 19 June 2007 (UTC)<br />
<br />
Maybe I didn't get some part of the paper, but is it really necessary to have 'order by' or 'group by' as syntax extensions? Isn't it possible to allow developers to use any function as long it matches the types of 'order' or 'group'?<br />
[[User:Falcon|Falcon]] 18:53, 20 June 2007 (UTC)<br />
<br />
------<br />
<br />
In the introduction, perhaps it's worth noting that JavaScript 1.7 supports list comprehensions.<br />
[[User:Fanf|Fanf]] 14:37, 4 July 2007 (UTC)<br />
<br />
------<br />
<br />
The type given for sortBy on page 2 should be sortBy :: (a -> a -> Ordering) -> [a] -> [a].<br />
[[User:Botje|Botje]] 18:50, 5 July 2007 (UTC)<br />
<br />
------<br />
<br />
[[User:Janis|Janis]] 11:10, 17 July 2007 (UTC) : <br />
<br />
In the middle of the left side of page nine, I was confused by "... we can relate the operation of f on the two different encodings of tuples discussed above ...". It seems those different encodings are actrually discussed only later ("below" rather than "above"). Or I did miss something here.<br />
<br />
Section 4.6 claims that patterns built of tuples are irrefutable. I don't see how this is the case in Haskell, in which tuple types are lifted. It is very well possible to refute an (a,b)-pattern: just match it against undefined.<br />
<br />
------<br />
<br />
A comparison with HaskellDB would be interesting; they're obviously rather different, as HaskellDB restricts you to writing queries with a direct translation to SQL, and field values are passed around in a kind of record rather than as explicit Haskell values (since they end up being implemented as bits of SQL). But if you are suggesting that these comprehensions could be used for direct database access, HaskellDB is a relevant "competitor".<br />
[[User:GaneshSittampalam|GaneshSittampalam]] 07:59, 20 July 2007 (UTC)<br />
<br />
------<br />
<br />
* For section 8: there is also GROUP BY in XSLT 2.0.<br />
* I think you should consider showing examples with records. The unextended Haskell examples in chapter 2 become a lot less complex with records. See [http://lambda-the-ultimate.org/node/2366#comment-35317]<br />
[[User:Sjoerd visscher|Sjoerd visscher]] 09:54, 28 July 2007 (UTC)</div>Sjoerd visscher