From gvidal at dsic.upv.es Wed Jan 2 04:06:15 2008 From: gvidal at dsic.upv.es (German Vidal) Date: Wed Jan 2 04:00:16 2008 Subject: [Haskell] SAS 2008 Third Call for Papers Message-ID: PLEASE POST --> SAS 2008 at the Technical University of Valencia We are happy to announce that SAS 2008, the Static Analysis Symposium, will take place at the Technical University of Valencia: Submission of abstract: January 12, 2008 Submission of full paper: January 19, 2008 Notification: March 7, 2008 Camera-ready version: April 5, 2008 Conference: July 16-18, 2008 Please see: http://www.dsic.upv.es/~sas2008/ ** The submission site is now open ** Maria Alpuente, German Vidal (PC co-chairs) --------------------------------------------------------------------------- Call for papers Static Analysis Symposium - SAS 2008 16-18 July 2008, Valencia, Spain (co-located with LOPSTR 2008) url http://www.dsic.upv.es/~sas2008 email sas2008@dsic.upv.es Static Analysis is increasingly recognized as a fundamental tool for high performance implementations and verification of programming languages and systems. The series of Static Analysis Symposia has served as the primary venue for presentation of theoretical, practical, and application advances in the area. The technical programme for SAS 2008 will consist of invited lectures and presentations of refereed papers. Contributions are welcome on all aspects of static analysis, including, but not limited to: abstract domains abstract interpretation abstract testing compiler optimizations control flow analysis data flow analysis model checking program specialization security analysis theoretical analysis frameworks type based analysis verification systems Submissions can address any programming paradigm, including concurrent, constraint, functional, imperative, logic, and object-oriented programming. Survey papers, that present some aspect of the above topics from a new perspective, and application papers, that describe experience with industrial applications, are also welcome. Papers must describe original work, be written and presented in English, and must not substantially overlap with papers that have been published, or that are simultaneously submitted to a journal or a conference with refereed proceedings. Submitted papers should be at most 15 pages formatted in LNCS style (excluding bibliography and well-marked appendices not intended for publication). PC members are not required to read the appendices, and thus papers should be intelligible without them. The conference proceedings is planned to be published by Springer-Verlag in the Lecture Notes in Computer Science series. Invited Speakers Roberto Giacobazzi (Universita' degli Studi di Verona, Italy) Ben Liblit (University of Wisconsin-Madison, USA) PC co-chairs Maria Alpuente (Technical University of Valencia, Spain) German Vidal (Technical University of Valencia, Spain) PC members Elvira Albert (Complutense University of Madrid, Spain) Roberto Bagnara (University of Parma, Italy) Maurice Bruynooghe (Katholieke Universiteit Leuven, Belgium) Radhia Cousot (CNRS & Ecole Polytechnique, France) Javier Esparza (Technical University of Munchen, Germany) Sandro Etalle (University of Twente, The Netherlands) Moreno Falaschi (University of Siena, Italy) Stephen Fink (IBM T.J. Watson Research Center, USA) John Gallagher (Roskilde University, Denmark) Maria del Mar Gallardo (University of Malaga, Spain) Chris Hankin (Imperial College, UK) Manuel Hermenegildo (Technical University of Madrid, Spain) Julia Lawall (University of Copenhagen, Denmark) Alexey Loginov (IBM T.J. Watson Research Center, USA) Hanne Riis Nielson (Technical University of Denmark, Denmark) David Schmidt (Kansas State University, USA) Harald Sondergaard (University of Melbourne, Australia) Tachio Terauchi (Tohoku University, Japan) Ji Wang (National Laboratory for Parallel and Distributed Processing, China) Organizing committee chair Alicia Villanueva (Technical University of Valencia, Spain) Important dates Submission of abstract: January 12, 2008 Submission of full paper: January 19, 2008 Notification: March 7, 2008 Camera-ready version: April 5, 2008 Conference: July 16-18, 2008 --------------------------------------------------------------------------- From waldmann at imn.htwk-leipzig.de Wed Jan 2 12:27:22 2008 From: waldmann at imn.htwk-leipzig.de (Johannes Waldmann) Date: Wed Jan 2 12:21:29 2008 Subject: [Haskell] Empty instance declaration In-Reply-To: <20071228222413.warof1vwg48css4w@webmail.spamcop.net> References: <9ffec2b60712190530v1c21e4f0x7f506b48e6f14773@mail.gmail.com> <9ffec2b60712270834y29e7f5c0ie9042bcbdccb7e5b@mail.gmail.com> <20071228222413.warof1vwg48css4w@webmail.spamcop.net> Message-ID: <477BC97A.9090405@imn.htwk-leipzig.de> ajb@spamcop.net wrote: > One thing that hasn't come up yet is that empty instance declarations are > the only decent option (that I know of) that we have in the absence of > real class aliases. I agree. I use this in my code in a number of places. It helps to write readable signatures. Best regards, Johannes Waldmann. From dons at galois.com Thu Jan 3 02:16:42 2008 From: dons at galois.com (Don Stewart) Date: Thu Jan 3 02:10:47 2008 Subject: [Haskell] announcing qtHaskell-1.1.1, the first preview release of qtHaskell In-Reply-To: References: Message-ID: <20080103071642.GF2806@scytale.galois.com> dth.tss: > For all interested in Haskell GUIs, there is now a first preview release > of qtHaskell - a set of Haskell bindings for Trolltech's Qt available at > > [1]http://qthaskell.sourceforge.net > > Any feedback, comments etc welcome > > Merry Christmas > > David Harley > > P.S. if anyone can get the system to build and work on a non-linux or > Windows environment - in particular MacOs - could the let me know the > precise install steps required. > Will this be uploaded to hackage.haskell.org? -- Don (P.S. excellent work!) From simonpj at microsoft.com Thu Jan 3 08:12:42 2008 From: simonpj at microsoft.com (Simon Peyton-Jones) Date: Thu Jan 3 08:06:40 2008 Subject: [Haskell] garbage collection of Concurrent Haskell threads? In-Reply-To: References: Message-ID: The GC discards an MVar when there are only blocked readers on it. But there can be any number of blocked readers. So long as the read remains in the future, however, the GC doesn't recover it, because it has no way to know that the thread will only read it and not write it. Your idea of splitting the MVar into two halves, a read end and a write end, might well improve this situation somewhat. But, like finalisers, it's dangerous to rely on reachability arguments for anything that's really important. Boehm's article on finalisers explains why. My guess is that the same remarks would apply to MVars. Simon From: conal.elliott@gmail.com [mailto:conal.elliott@gmail.com] On Behalf Of Conal Elliott Sent: 24 December 2007 18:49 To: Simon Peyton-Jones Cc: haskell@haskell.org Subject: Re: [Haskell] garbage collection of Concurrent Haskell threads? Thanks, Simon. If I understand the mechanism you're describing, it discards readers of an empty MVar when there are no other references to the MVar *because* the MVar can never get written. And if there are other readers but no writers, then I'm guessing GC wouldn't know that, and none of the readers get discarded. Is that so? I think Baker & Hewitt's trick was analogous to discarding writers of an already full MVar when there are readers (readMVar) but no takers (takeMVar). (Though not quite, since readMVar is implemented via takeMVar & putMVar.) I guess that effectively means IVars instead of MVars. In either direction (blocked reader or blocked writer), the interface of MVars (or IVars) would seem to prevent an accurate analysis, since GC wouldn't know whether a Var reference was for reading or writing. Right? A simple solution might be to hide the Var itself and instead expose reader and writer halves. If there's an analysis problem at all, does that solution make sense? Cheers, - Conal On Dec 24, 2007 1:02 AM, Simon Peyton-Jones > wrote: GHC already garbage-collects threads that are blocked on an MVar that is otherwise inaccessible (and hence cannot be updated). More precisely, GHC sends the thread an asynchronous exception (ThreadBlocked or something), so that it has a chance to clean up. So perhaps the GC you want is already implemented? Simon From: haskell-bounces@haskell.org [mailto:haskell-bounces@haskell.org] On Behalf Of Conal Elliott Sent: 24 December 2007 00:15 To: haskell@haskell.org Subject: [Haskell] garbage collection of Concurrent Haskell threads? The classic paper "The Incremental Garbage Collection of Processes" (http://citeseer.ist.psu.edu/baker77incremental.html) describes "futures" and how particularly garbage collecting them when their pending result is no longer referenced. I've been playing with an implementation of futures in Concurrent Haskell ( http://haskell.org/haskellwiki/Reactive), using MVars, and I'm stumped about how to GC non-winning threads in a race between futures ("parallel or"). I'm having winner kill loser, which seems to work fine, though is potentially dangerous w.r.t locked resources. Still, the elegance of a GC-based solution appeals to me. Has anyone explored process GC ideas for Concurrent Haskell (or STM)? Futures are implemented using Concurrent Haskell's MVars. I first tried using STM and TVars, simply using orElse to implement mappend for futures. However, I didn't see how to avoid nesting "atomically", which yielded a run-time error. If anyone has ideas about using STM & TVars for futures, I'd love to hear. Thanks, - Conal -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell/attachments/20080103/08309d17/attachment.htm From Malcolm.Wallace at cs.york.ac.uk Thu Jan 3 08:23:03 2008 From: Malcolm.Wallace at cs.york.ac.uk (Malcolm Wallace) Date: Thu Jan 3 08:22:08 2008 Subject: [Haskell] Empty instance declaration In-Reply-To: <20071228222413.warof1vwg48css4w@webmail.spamcop.net> References: <9ffec2b60712190530v1c21e4f0x7f506b48e6f14773@mail.gmail.com> <9ffec2b60712270834y29e7f5c0ie9042bcbdccb7e5b@mail.gmail.com> <20071228222413.warof1vwg48css4w@webmail.spamcop.net> Message-ID: <20080103132303.28e47f6a.Malcolm.Wallace@cs.york.ac.uk> ajb@spamcop.net wrote: > One thing that hasn't come up yet is that empty instance declarations > are the only decent option (that I know of) that we have in the > absence of real class aliases. It does seem to me that compilers could reasonably distinguish between incomplete definition: > > class (Monad m, Ord t) => ReVars m t where { } > > instance (Monad m, Ord t) => ReVars m t where { } and intentionally incomplete definition: class (Monad m, Ord t) => ReVars m t instance (Monad m, Ord t) => ReVars m t Both syntaxes (with and without the 'where') are currently legal, but the latter is more obviously deliberate (at least to this human reader). Regards, Malcolm From Marnix.Klooster at infor.com Thu Jan 3 10:02:25 2008 From: Marnix.Klooster at infor.com (Marnix Klooster) Date: Thu Jan 3 09:56:22 2008 Subject: [Haskell] garbage collection of Concurrent Haskell threads? In-Reply-To: References: Message-ID: <06BF843FBE391649BE41713BC59889AD0314C31B@nlbawexmb1.infor.com> Hello Simon, For the record: I assume that by "Boehm's article on finalisers" you mean: @inproceedings{DBLP :conf/popl/Boehm03, author = {Hans-Juergen Boehm}, title = {Destructors, finalizers, and synchronization}, booktitle = {POPL}, year = {2003}, pages = {262-272}, ee = {http://doi.acm.org/10.1145/640128.604153}, bibsource = {DBLP, http://dblp.uni-trier.de} } (which is also at http://citeseer.ist.psu.edu/boehm03destructors.html)? Groetjes, <>< Marnix -- Marnix Klooster | Software Engineer, ERP LN Enterprise Server | Infor | (+31 or 0)342-428511 | marnix.klooster@infor.com | Infor Global Solutions (Barneveld) BV | P.O. box 143 | 3770 AC Barneveld | The Netherlands ________________________________ From: haskell-bounces@haskell.org [mailto:haskell-bounces@haskell.org] On Behalf Of Simon Peyton-Jones Sent: Thursday, 3 January, 2008 14:13 To: Conal Elliott Cc: haskell@haskell.org Subject: RE: [Haskell] garbage collection of Concurrent Haskell threads? The GC discards an MVar when there are only blocked readers on it. But there can be any number of blocked readers. So long as the read remains in the future, however, the GC doesn't recover it, because it has no way to know that the thread will only read it and not write it. Your idea of splitting the MVar into two halves, a read end and a write end, might well improve this situation somewhat. But, like finalisers, it's dangerous to rely on reachability arguments for anything that's really important. Boehm's article on finalisers explains why. My guess is that the same remarks would apply to MVars. Simon From: conal.elliott@gmail.com [mailto:conal.elliott@gmail.com] On Behalf Of Conal Elliott Sent: 24 December 2007 18:49 To: Simon Peyton-Jones Cc: haskell@haskell.org Subject: Re: [Haskell] garbage collection of Concurrent Haskell threads? Thanks, Simon. If I understand the mechanism you're describing, it discards readers of an empty MVar when there are no other references to the MVar *because* the MVar can never get written. And if there are other readers but no writers, then I'm guessing GC wouldn't know that, and none of the readers get discarded. Is that so? I think Baker & Hewitt's trick was analogous to discarding writers of an already full MVar when there are readers (readMVar) but no takers (takeMVar). (Though not quite, since readMVar is implemented via takeMVar & putMVar.) I guess that effectively means IVars instead of MVars. In either direction (blocked reader or blocked writer), the interface of MVars (or IVars) would seem to prevent an accurate analysis, since GC wouldn't know whether a Var reference was for reading or writing. Right? A simple solution might be to hide the Var itself and instead expose reader and writer halves. If there's an analysis problem at all, does that solution make sense? Cheers, - Conal On Dec 24, 2007 1:02 AM, Simon Peyton-Jones wrote: GHC already garbage-collects threads that are blocked on an MVar that is otherwise inaccessible (and hence cannot be updated). More precisely, GHC sends the thread an asynchronous exception (ThreadBlocked or something), so that it has a chance to clean up. So perhaps the GC you want is already implemented? Simon From: haskell-bounces@haskell.org [mailto:haskell-bounces@haskell.org] On Behalf Of Conal Elliott Sent: 24 December 2007 00:15 To: haskell@haskell.org Subject: [Haskell] garbage collection of Concurrent Haskell threads? The classic paper "The Incremental Garbage Collection of Processes" (http://citeseer.ist.psu.edu/baker77incremental.html) describes "futures" and how particularly garbage collecting them when their pending result is no longer referenced. I've been playing with an implementation of futures in Concurrent Haskell ( http://haskell.org/haskellwiki/Reactive), using MVars, and I'm stumped about how to GC non-winning threads in a race between futures ("parallel or"). I'm having winner kill loser, which seems to work fine, though is potentially dangerous w.r.t locked resources. Still, the elegance of a GC-based solution appeals to me. Has anyone explored process GC ideas for Concurrent Haskell (or STM)? Futures are implemented using Concurrent Haskell's MVars. I first tried using STM and TVars, simply using orElse to implement mappend for futures. However, I didn't see how to avoid nesting "atomically", which yielded a run-time error. If anyone has ideas about using STM & TVars for futures, I'd love to hear. Thanks, - Conal -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell/attachments/20080103/1aefee4a/attachment-0001.htm From waldmann at imn.htwk-leipzig.de Thu Jan 3 14:43:53 2008 From: waldmann at imn.htwk-leipzig.de (Johannes Waldmann) Date: Thu Jan 3 14:37:50 2008 Subject: [Haskell] Data.Tree.drawTree more spacefilling? Message-ID: <477D3AF9.2010708@imn.htwk-leipzig.de> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Dear all, I'm looking for a Data.Tree.drawTree that is a bit more "spacefilling" (put some subtrees side by side). Thanks - Johannes Waldmann, Leipzig. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.4-svn0 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFHfTr53ZnXZuOVyMIRAhqkAKCkXFRyqtR+6KaTnFf2msAGd1hf1QCeOFpB /WMg+//boG/vAos+yO0iHZo= =P13d -----END PGP SIGNATURE----- From stephan.friedrichs at tu-bs.de Sat Jan 5 13:35:19 2008 From: stephan.friedrichs at tu-bs.de (Stephan Friedrichs) Date: Sat Jan 5 13:29:18 2008 Subject: [Haskell] Question concerning the "Data Parallel Haskell: a status report" paper Message-ID: <477FCDE7.3060909@tu-bs.de> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi Haskellers, the paper "Data Parallel Haskell: a status report" (Chakravarty, Leshchinskiy, Peyton Jones, Keller and Marlow) is an important source of my seminar handout about skeletons and parallelisation. It contains code samples concerning the ArrElem type family: class ArrElem e where data [:e:] (!:) :: [:e:] -> Int -> e and various instance declarations, e.g.: class ArrElem Int where -- sic! -- ... My question is: Is "class ArrElem Int" a typo and should be "instance ArrElem Int" or did I get something wrong? Thanks in advance and a happy new year - Stephan - -- Fr?her hie? es ja: Ich denke, also bin ich. Heute wei? man: Es geht auch so. - Dieter Nuhr -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.8 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkd/zecACgkQyui/cGVQfkizigCdHZ7DrL+v+OcyHZDF8hWk9jO7 fQEAnR5niACeaSASPLzMqfclirzjHPRU =Yvj6 -----END PGP SIGNATURE----- From dons at galois.com Sat Jan 5 19:20:46 2008 From: dons at galois.com (Don Stewart) Date: Sat Jan 5 19:14:43 2008 Subject: [Haskell] Haskell Weekly News: Issue 68 - January 05, 2008 Message-ID: <20080106002046.GA18375@scytale.galois.com> --------------------------------------------------------------------------- Haskell Weekly News Issue 68 - January 05, 2008 --------------------------------------------------------------------------- Welcome to issue 68 of HWN, a newsletter covering developments in the [1]Haskell community. This HWN features new releases of the GHC and nhc98 Haskell compilers, a pre-release of darcs 2.0, several new user groups formed, and of course, more than 100 updated and new libraries 1. http://haskell.org/ Announcements GHC 6.8.2. The GHC Team [2]announced the release of GHC 6.8.2, featuring optimisation improvements, improvements to ghci and fixes to standalone deriving. 2. http://www.haskell.org/ghc/download_ghc_682.html nhc98 1.2 released. Malcolm Wallace [3]announced the release of nhc98 1.2. 1.20 is a refreshed release with many of the current core library packages included, and a variety of small bugfixes since the last release. It successfully compiles and runs more programs from the nobench suite than jhc, hbc, Hugs, or yhc. It generates an interpreted bytecode that, on the whole runs faster than that generated by Hugs or yhc, and in many cases is also faster than ghci. Although nhc98 is written in Haskell, you don't need an existing Haskell compiler on your platform to build nhc98 - a C compiler will do. Hence, it is portable to almost any unix-like machine with a 32-bit compatibility mode. Many useful build tools come included: hmake (the inspiration for ghc --make), hi (interactive read-eval-print, like Hugs or ghci), cpphs (Haskell-aware replacement for cpp) and hsc2hs (preprocessor for FFI code) 3. http://article.gmane.org/gmane.comp.lang.haskell.general/15770 darcs 2.0.0pre2. David Roundy [4]announced the availability of the second prerelease of [5]darcs two, darcs 2.0.0pre2. This release fixes several severe performance bugs that were present in the first prerelease. These issues were identified and fixed thanks to the helpful testing of Simon Marlow and Peter Rockai. We also added support for compilation under ghc 6.4, so even more users should be able to test this release. 4. http://article.gmane.org/gmane.comp.lang.haskell.cafe/33483 5. http://darcs.net/ The Monad.Reader Issue 9: SoC special. Wouter Swierstra [6]announced a new issue of The Monad.Reader, a 'Summer of Code Special' - it consists of three articles from student participants of Google's Summer of Code, describing the projects they worked on. 6. http://article.gmane.org/gmane.comp.lang.haskell.cafe/31848 What's happening with Haskell? The 13th HCAR. Andres Loeh [7]announced the 13th edition of the Haskell Communities and Activities Report 7. http://www.haskell.org/communities/ Teach yourself gtk2hs in 21 hours. Hans van Thiel [8]announced a Gtk2Hs basics tutorial, based on the Tony Gale and Ian Main GTK+2.0 tutorial, is now available for review and comment. 8. http://article.gmane.org/gmane.comp.lang.haskell.cafe/32671 Minimalistic Haskell blog framework. Paul Brown [9]announced a lightweight, experimental blog publishing application, [10]perpubplat 9. http://article.gmane.org/gmane.comp.lang.haskell.cafe/34503 10. http://datapr0n.com/repos/perpubplat atom. Tom Hawkins [11]announced the release of atom 2007.12; atom is a domain-specific language embedded in Haskell for describing real-time control applications 11. http://www.haskell.org/pipermail/haskell-cafe/2007-December/035742.html Hackage New and updated libraries in [12]the Hackage library database. 12. http://hackage.haskell.org/ * bytestring 0.9.0.4. Uploaded by DonaldStewart. [13]bytestring: Fast, packed, strict and lazy byte arrays with a list interface. * uuagc 0.9.5. Uploaded by ArieMiddelkoop. [14]uuagc: Attribute Grammar System of Universiteit Utrecht. * uulib 0.9.5. Uploaded by ArieMiddelkoop. [15]uulib: Haskell Utrecht Tools Library. * llvm 0.0.2. Uploaded by BryanOSullivan. [16]llvm: Bindings to the LLVM compiler toolkit. * HDBC-sqlite3 1.1.3.1. Uploaded by JohnGoerzen. [17]HDBC-sqlite3: Sqlite v3 driver for HDBC. * HDBC-odbc 1.1.3.1. Uploaded by JohnGoerzen. [18]HDBC-odbc: ODBC driver for HDBC. * dimensional 0.7.2. Uploaded by BjornBuckwalter. [19]dimensional: Statically checked physical dimensions.. * uulib 0.9.5. Uploaded by ArieMiddelkoop. [20]uulib: Haskell Utrecht Tools Library. * hsc3 0.1. Uploaded by RohanDrape. [21]hsc3: Haskell SuperCollider. * hosc 0.1. Uploaded by RohanDrape. [22]hosc: Haskell Open Sound Control. 13. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/bytestring-0.9.0.4 14. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/uuagc-0.9.5 15. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/uulib-0.9.5 16. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/llvm-0.0.2 17. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HDBC-sqlite3-1.1.3.1 18. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HDBC-odbc-1.1.3.1 19. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/dimensional-0.7.2 20. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/uulib-0.9.5 21. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hsc3-0.1 22. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hosc-0.1 * GLFW 0.2. Uploaded by PaulLiu. [23]GLFW: A binding for GLFW, An OpenGL Framework. * control-timeout 0.1. Uploaded by AdamLangley. [24]control-timeout: Timeout handling. * hiccup 0.35. Uploaded by KyleConsalus. [25]hiccup: Relatively efficient Tcl interpreter with support for basic operations. * phooey 2.0. Uploaded by ConalElliott. [26]phooey: Functional user interfaces. * reactive 0.0. Uploaded by ConalElliott. [27]reactive: Simple foundation for functional reactive programming. * phooey 1.4. Uploaded by ConalElliott. [28]phooey: Functional user interfaces. * hburg 1.1.1. Uploaded by IgorBohm. [29]hburg: Haskell Bottom Up Rewrite Generator. * hinotify 0.2. Uploaded by LennartKolmodin. [30]hinotify: Haskell binding to INotify. * cabal-rpm 0.3.3. Uploaded by BryanOSullivan. [31]cabal-rpm: RPM package builder for Haskell Cabal source packages.. * codec-libevent 0.1. Uploaded by AdamLangley. [32]codec-libevent: Cross-platform structure serialisation. 23. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/GLFW-0.2 24. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/control-timeout-0.1 25. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hiccup-0.35 26. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/phooey-2.0 27. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/reactive-0.0 28. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/phooey-1.4 29. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hburg-1.1.1 30. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hinotify-0.2 31. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/cabal-rpm-0.3.3 32. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/codec-libevent-0.1 * irc 0.4. Uploaded by TrevorElliott. [33]irc: A small library for parsing IRC messages.. * dlist 0.4. Uploaded by DonaldStewart. [34]dlist: Differences lists. * AutoForms 0.4.0. Uploaded by MadsLindstroem. [35]AutoForms: GUI library based upon generic programming (SYB3). * bktrees 0.2.1. Uploaded by JosefSvenningsson. [36]bktrees: A set data structure with approximate searching. * bktrees 0.2. Uploaded by JosefSvenningsson. [37]bktrees: A set data structure with approximate searching. * binary-strict 0.1. Uploaded by AdamLangley. [38]binary-strict: Binary deserialisation using strict ByteStrings. * haddock 0.9. Uploaded by SimonMarlow. [39]haddock: Haddock is a documentation-generation tool for Haskell libraries. * bytestring-mmap 0.2.0. Uploaded by DonaldStewart. [40]bytestring-mmap: mmap support for strict ByteStrings. * bytestring 0.9.0.3. Uploaded by DonaldStewart. [41]bytestring: Fast, packed, strict and lazy byte arrays with a list interface. * hiccup 0.3. Uploaded by KyleConsalus. [42]hiccup: Added by KyleConsalus, Wed Dec 19 17:00:42 PST 2007.. 33. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/irc-0.4 34. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/dlist-0.4 35. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/AutoForms-0.4.0 36. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/bktrees-0.2.1 37. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/bktrees-0.2 38. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/binary-strict-0.1 39. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/haddock-0.9 40. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/bytestring-mmap-0.2.0 41. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/bytestring-0.9.0.3 42. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hiccup-0.3 * cedict 0.1.1. Uploaded by JasonDusek. [43]cedict: Convenient Chinese character lookup.. * TypeCompose 0.3. Uploaded by ConalElliott. [44]TypeCompose: Type composition classes & instances. * bytestring-mmap 0.1.2. Uploaded by DonaldStewart. [45]bytestring-mmap: mmap support for strict ByteStrings. * bytestring 0.9.0.2. Uploaded by DonaldStewart. [46]bytestring: Fast, packed, strict and lazy byte arrays with a list interface. * bytestring-mmap 0.1.1. Uploaded by DonaldStewart. [47]bytestring-mmap: mmap support for strict ByteStrings. * mkcabal 0.3. Uploaded by DonaldStewart. [48]mkcabal: Generate cabal files for a Haskell project. * terminfo 0.1. Uploaded by Judah Jacobson. [49]terminfo: Haskell bindings to the terminfo library.. * Cabal 1.2.3.0. Uploaded by Duncan Coutts. [50]Cabal: A framework for packaging Haskell software. * hxt 7.4. Uploaded by UweSchmidt. [51]hxt: A collection of tools for processing XML with Haskell.. * X11 1.4.1. Uploaded by Spencer Janssen. [52]X11: A binding to the X11 graphics library. 43. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/cedict-0.1.1 44. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/TypeCompose-0.3 45. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/bytestring-mmap-0.1.2 46. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/bytestring-0.9.0.2 47. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/bytestring-mmap-0.1.1 48. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/mkcabal-0.3 49. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/terminfo-0.1 50. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Cabal-1.2.3.0 51. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hxt-7.4 52. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/X11-1.4.1 * dataenc 0.10.1. Uploaded by Magnus Therning. [53]dataenc: Data encoding library currently providing Uuencode, Base64, Base64Url, Base32, Base32Hex, and Base16.. * bytestringreadp 0.1. Uploaded by Gracjan Polak. [54]bytestringreadp: A ReadP style parser library for ByteString. * encoding 0.3. Uploaded by HenningGuenther. [55]encoding: A library for various character encodings. * hslua 0.2. Uploaded by Gracjan Polak. [56]hslua: A Lua language interpreter embedding in Haskell. * xmonad-contrib 0.5. Uploaded by Spencer Janssen. [57]xmonad-contrib: Third party extensions for xmonad. * xmonad 0.5. Uploaded by SpencerJanssen. [58]xmonad: A tiling window manager. * pandoc 0.45. Uploaded by John MacFarlane. [59]pandoc: Conversion between markup formats. * markov-chain 0.0.1. Uploaded by Henning Thielemann. [60]markov-chain: Markov Chains for generating random sequences with a user definable behaviour.. * parsedate 3000.0.0. Uploaded by Bjorn Bringert. [61]parsedate: Data and time parsing for CalendarTime. * hackage2hwn 0.1. Uploaded by Don Stewart. [62]hackage2hwn: Convert hackage = Hackage RSS feeds to Haskell Weekly News format. 53. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/dataenc-0.10.1 54. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/bytestringreadp-0.1 55. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/encoding-0.3 56. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hslua-0.2 57. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/xmonad-contrib-0.5 58. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/xmonad-0.5 59. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/pandoc-0.45 60. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/markov-chain-0.0.1 61. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/parsedate-3000.0.0 62. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hackage2hwn-0.1 * hask-home 2007.12.6. Uploaded by BjornBringert. [63]hask-home: Generate homepages for cabal packages. * hmarkup 3000.0.1. Uploaded by BjornBringert. [64]hmarkup: Simple wikitext-like markup format implementation.. * hspread 0.2. Uploaded by AndreaVezzosi. [65]hspread: A client library for the spread toolkit. * pcap 0.4.2. Uploaded by BryanOSullivan. [66]pcap: A system-independent interface for user-level packet capture. * hogg 0.3.0. Uploaded by ConradParker. [67]hogg: Library and tools to manipulate the Ogg container format. * Finance-Quote-Yahoo 0.4.1. Uploaded by BradClawsie. [68]Finance-Quote-Yahoo: Obtain quote data from finance.yahoo.com. * Monadius 0.9.20071204. Uploaded by GwernBranwen. [69]Monadius: 2-D arcade scroller. * Shu-thing 1.0.20071203. Uploaded by GwernBranwen. [70]Shu-thing: A vector shooter game. * hmatrix 0.1.1.0. Uploaded by AlbertoRuiz. [71]hmatrix: Linear algebra and numerical computations. * HTTP 3001.0.3. Uploaded by BjornBringert. [72]HTTP: Added by BjornBringert, Fri Nov 30 14:50:55 PST 2007.. 63. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hask-home-2007.12.6 64. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hmarkup-3000.0.1 65. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hspread-0.2 66. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/pcap-0.4.2 67. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hogg-0.3.0 68. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Finance-Quote-Yahoo-0.4.1 69. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Monadius-0.9.20071204 70. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Shu-thing-1.0.20071203 71. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hmatrix-0.1.1.0 72. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HTTP-3001.0.3 * rss 3000.0.1. Uploaded by BjornBringert. [73]rss: A library for generating RSS 2.0 feeds.. * haxr 3000.0.1. Uploaded by BjornBringert. [74]haxr: XML-RPC client and server library.. * fitsio 0.1. Uploaded by EricSessoms. [75]fitsio: A library for reading and writing data files in the FITS data format.. * YamlReference 0.6. Uploaded by Oren Ben Kiki. [76]YamlReference, YAML reference implementation * LambdaShell 0.9.1. Uploaded by Robert Dockins. [77]LambdaShell, simple shell for evaluating lambda expressions * Shellac 0.9.1. Uploaded by Robert Dockins. [78]Shellac, a framework for creating shell envinronments * EdisonCore 1.2.1.1. Uploaded by Robert Dockins. [79]EdisonCore, a library of efficent, purely-functional data structures (Core Implementations) * hmatrix 0.1.0.0. Uploaded by Alberto Ruiz. [80]hmatrix, linear algebra and numerical computations * strict-concurrency 0.1. Uploaded by Don Stewart. [81]strict-concurrency, strict concurrency abstractions * X11 1.4.0. Uploaded by Don Stewart. [82]X11, binding to the X11 graphics library 73. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/rss-3000.0.1 74. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/haxr-3000.0.1 75. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/fitsio-0.1 76. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YamlReference-0.6 77. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/LambdaShell-0.9.1 78. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Shellac-0.9.1 79. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/EdisonCore-1.2.1.1 80. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hmatrix-0.1.0.0 81. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/strict-concurrency-0.1 82. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/X11-1.4.0 * safecopy 0.3. Uploaded by David Himmelstrup. [83]safecopy, binary serialization with version control * HaXml 1.13.3. Uploaded by Malcolm Wallace. [84]HaXml, utilities for manipulating XML documents * c2hs 0.15.1. Uploaded by Duncan Coutts. [85]c2hs, C->Haskell Interface Generator * calc 0.1. Uploaded by Austin Seipp. [86]calc, small compiler for arithmetic expressions. * miniplex 0.2.1. Uploaded by Lukas Mai. [87]miniplex, simple 1-to-N interprocess communication * sat 1.1.1. Uploaded by Andrii Zvorygin. [88]sat, CNF SATisfier * dimensional 0.7.1. Uploaded by Bjorn Buckwalter. [89]dimensional, statically checked physical dimensions * hxt 7.4. Uploaded by Uwe Schmidt. [90]hxt, collection of tools for processing XML with Haskell. * dlist 0.3.2. Uploaded by Don Stewart. [91]dlist, difference lists. A list type supporting fast append. * mkcabal 0.2. Uploaded by Don Stewart. [92]mkcabal, generate cabal files for a Haskell project 83. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/safecopy-0.3 84. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HaXml-1.13.3 85. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/c2hs-0.15.1 86. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/calc-0.1 87. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/miniplex-0.2.1 88. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/sat-1.1.1 89. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/dimensional-0.7.1 90. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hxt-7.4 91. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/dlist-0.3.2 92. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/mkcabal-0.2 * Chart 0.5. Uploaded by Tim Docker. [93]Chart, a library for generating 2D Charts and Plots * MaybeT 0.1.1. Uploaded by Don Stewart. [94]MaybeT, MaybeT monad transformer * regex-pcre 0.93. Uploaded by Chris Kuklewicz. [95]regex-pcre, replaces Text.Regex * fixpoint 0.1. Uploaded by Roman Leshchinskiy. [96]fixpoint, data types as fixpoints * ChasingBottoms 1.2.2. Uploaded by Nils Anders Danielsson. [97]ChasingBottoms, support for testing partial and infinite values * GrowlNotify 0.3. Uploaded by Nicholas Burlett. [98]GrowlNotify, notification utility for Growl * pcap 0.4.1. Uploaded by Bryan OSullivan. [99]pcap, a system-independent interface for user-level packet capture * bencode 0.3. Uploaded by David Himmelstrup. [100]bencode, parser and printer for bencoded data. * stream-fusion 0.1.1. Uploaded by Don Stewart. [101]stream-fusion, provides the standard Haskell list library reimplemented to allow stream fusion. This should in general provide faster list operations, and faster code for list-heavy programs. * HTTP 3001.0.2. Uploaded by Bjorn Bringert. [102]HTTP, library for client-side HTTP 93. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Chart-0.5 94. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/MaybeT-0.1.1 95. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/regex-pcre-0.93 96. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/fixpoint-0.1 97. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/ChasingBottoms-1.2.2 98. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/GrowlNotify-0.3 99. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/pcap-0.4.1 100. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/bencode-0.3 101. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/stream-fusion-0.1.1 102. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HTTP-3001.0.2 * X11-xft 0.2. Uploaded by Clemens Fruhwirth. [103]X11-xft, bindings to the Xft, X Free Type interface library, and some Xrender parts * GrowlNotify 0.1. Uploaded by Nicholas Burlett. [104]GrowlNotify, notification utility for Growl. * HsHaruPDF 0.0.0. Uploaded by Audrey Tang. [105]HsHaruPDF, Haskell binding to libharu * unicode-normalization 0.1. Uploaded by Reinier Lamers. [106]unicode-normalization, Unicode normalization using the ICU library * uniplate 1.0.1. Uploaded by Neil Mitchell. [107]uniplate, uniform type generic traversals * lax-0.0.0. Uploaded by Wolfgang Jeltsch. [108]lax, Lax arrows are variants of other arrows which are ?less strict? than the original arrows. They can be used, for example, to produce I/O fixpoints in situations where fixIO would fail. * fastcgi 3001.0.1. Uploaded by Bjorn Bringert. [109]fastcgi, a Haskell library for writing FastCGI programs 103. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/X11-xft-0.2 104. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/GrowlNotify-0.1 105. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HsHaruPDF-0.0.0 106. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/unicode-normalization-0.1 107. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/uniplate-1.0.1 108. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/lax-0.0.0 109. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/fastcgi-3001.0.1 Conference roundup New user groups * [110]Portland Functional Programmers Group * [111]FPSIG @ Southampton * [112]SingHaskell 110. http://groups.google.com/group/pdxfunc 111. http://article.gmane.org/gmane.comp.lang.haskell.cafe/32753 112. http://article.gmane.org/gmane.comp.lang.haskell.cafe/32268 Jobs Prototyping. Peter Verswyvelen [113]announced a job using Haskell for prototyping computer animation and games 113. http://article.gmane.org/gmane.comp.lang.haskell.cafe/33377 Blog noise [114]Haskell news from the [115]blogosphere. 114. http://planet.haskell.org/ 115. http://haskell.org/haskellwiki/Blog_articles * [116]Small shots of lambda calculus * [117]Pattern Matching in Ruby * [118]Haskell 'words' and Perl 'split' * [119]Word numbers, Part 4: Sort the words, sum the numbers * [120]Improve Your C#! Borrow from F#... * [121]Sun battling Microsoft (over F#?) * [122]zip in F# and Haskell * [123]Random numbers in Haskell * [124]A survey of Haskell unicode support * [125]Using Haskell for scripting tasks 116. http://fmota.tk/2007/11/small-shots-of-lambda-calculus-part-iii.html 117. http://blog.pretheory.com/arch/2007/11/pattern_matching_in_ruby_1.php 118. http://osfameron.vox.com/library/post/haskell-words-and-perl-split.html 119. http://conway.rutgers.edu/~ccshan/wiki/blog/posts/WordNumbers4/ 120. http://diditwith.net/2007/11/14/ImproveYourCBorrowFromF.aspx 121. http://vanirsystems.com/danielsblog/?p=227 122. http://jyliao.blogspot.com/2007/11/learning-wpf-with-f-dock-and-grid.html 123. http://monadicheadaches.blogspot.com/2007/11/random-numbers-where-it-all-started.html 124. http://blog.kfish.org/2007/10/survey-haskell-unicode-support.html 125. http://pinderkent.blogsavy.com/archives/142 * [126]Princeton lost the DARPA Grand Challenge because of a C# memory leak * [127]Laziness in C#/LINQ * [128]Getting functional programming: currying * [129]The magic foldr * [130]Nested Parallel List Comprehensions * [131]FFI in Haskell * [132]Broadening ones horizons * [133]Monad Wars - 1: the Prompt * [134]Monad Wars - 2: the command line * [135]Holy Shmoly, GHC Haskell 6.8 smokes Python and Ruby away! 126. http://www.codeproject.com/showcase/IfOnlyWedUsedANTSProfiler.asp 127. http://gavinbierman.blogspot.com/2007/11/laziness-in-clinq.html 128. http://overwatering.blogspot.com/2007/11/currying.html 129. http://caos.di.uminho.pt/~ulisses/blog/2007/11/20/foldr-the-magic-function/ 130. http://tomschrijvers.blogspot.com/2007/11/nested-parallel-list-comprehensions.html 131. http://notes-on-haskell.blogspot.com/2007/02/ffi-in-haskell.html 132. http://ms-os.com/showthread.php?t=116050 133. http://osfameron.vox.com/library/post/monad-wars---1-the-prompt.html 134. http://osfameron.vox.com/library/post/monad-wars---2-the-command-line.html 135. http://www.cse.unsw.edu.au/~dons/blog/2007/11/29#smoking * [136]Use those extra cores and beat C today! (Parallel Haskell redux) * [137]Parallelizing Haskell * [138]Python, Haskell, Ruby Smackdown * [139]Legitimate uses of micro-benchmarks: parameter passing and function call costs * [140]Holy Shmoly, GHC does some magic all by itself! * [141]PARE - PARallel Execution in Erlang - a response to Haskell * [142]Haskell design patterns are (probably) needed * [143]Deriving a Virtual Machine * [144]Games, cores, and functional languages * [145]Structure of a functional Java, er, method 136. http://www.cse.unsw.edu.au/~dons/blog/2007/11/29#smoking-4core 137. http://cmssphere.blogspot.com/2007/11/parallelizing-haskell.html 138. http://feedingthesnake.wordpress.com/2007/11/30/python-haskell-ruby-smackdown/ 139. http://eigenclass.org/hiki/legitimate-microbenchmarks 140. http://geekrant.wordpress.com/2007/11/29/holy-shmoly-ghc-does-some-magic-all-by-itself/ 141. http://chlorophil.blogspot.com/2007/11/pare-parallel-execution-in-erlang.html 142. http://jpmoresmau.blogspot.com/2007/11/haskell-design-patterns-are-probably.html 143. http://www.iis.sinica.edu.tw/~scm/?p=42 144. http://www.antipode.ca/2007/games-cores-and-functional-languages/ 145. http://jpmoresmau.blogspot.com/2007/11/structure-of-functional-java-er-method.html * [146]Current Fixation: Haskell * [147]Multicores, F# and SPJ: leading people to Haskell * [148]The IO Monad for People who Simply Don't Care * [149]Why I chose to learn Haskell * [150]Some Playing with Derivatives * [151]Solve Ball Clock Puzzle in Python and Haskell * [152]Back to functional languages... at least for a while? * [153]Overloading Semicolon, or, monads from 10,000 Feet * [154]Getting started with Haskell * [155]Arrows first encounter 146. http://onerousmachinations.blogspot.com/2007/11/current-fixation-haskell.html 147. http://nxtgenug.spaces.live.com/Blog/cns!59F714755D6E2A69!221.entry 148. http://sigfpe.blogspot.com/2007/11/io-monad-for-people-who-simply-dont.html 149. http://offthelip.org/?p=91 150. http://cdsmith.wordpress.com/2007/11/29/some-playing-with-derivatives/ 151. http://the-little-haskeller.blogspot.com/2007/11/solve-ball-clock-puzzle-in-python-and.html 152. http://afurtado1980.spaces.live.com/Blog/cns!63514833CE40C143!518.entry 153. http://osteele.com/archives/2007/12/overloading-semicolon 154. http://talkingcode.co.uk/2007/12/03/getting-started-with-haskell/ 155. http://monadicheadaches.blogspot.com/2007/12/arrows-first-encounter.html * [156]Arithmetic for lists * [157]Functional Programming on .NET - Part 1 * [158]N-Queens in Haskell * [159]N-Queens in the writer monad * [160]Unit testing in Haskell * [161]Calculating the reflect-rotate-translate normal form for an isometry of the plane in Haskell, and verifying it with QuickCheck * [162]Visualizing 2D convex hull using Gtk and OpenGL in Haskell * [163]Hugs for the Nintendo DS * [164]Comparative terseness of Perl and Haskell * [165]Note on point-free programming style 156. http://wadler.blogspot.com/2007/12/arithmetic-for-lists.html 157. http://zerogradient.wordpress.com/2007/12/05/functional-programming-on-net-part-1/ 158. http://therning.org/magnus/archives/330 159. http://cdsmith.wordpress.com/2007/12/09/some-basic-stuff-the-writer-monad/ 160. http://hitesh-jasani.blogspot.com/2007/12/unit-testing-with-hunit-in-haskell.html 161. http://www.kennknowles.com/blog/2007/12/03/calculating-the-reflect-rotate-translate-normal-form-for-an-isometry-of-the-plane-in-haskell-and-verifying-it-with-quickcheck/ 162. http://www.kennknowles.com/blog/2007/11/20/visualizing-2d-convex-hull-using-gtk-and-opengl-in-haskell/ 163. http://closuretohome.blogspot.com/2007/12/hugs-for-nintendo-ds.html 164. http://blog.plover.com/2007/11/30/#pow-sqrt 165. http://blog.plover.com/prog/haskell/pointfree.html * [166]Haskell Fibonacci Revisited * [167]PXSL Tools 1.0: Your ticket out of XML Hell * [168]Haskell is kind of cool * [169]Learning Haskell with ProjectEuler * [170]Infinite lazy Knuth-Bendix completion for monoids in Haskell * [171]Hugs for the Nintendo DS * [172]My Type of Language... * [173]Catching pods with hpodder * [174]Hamming's problem * [175]Sharper function operators 166. http://chasethedevil.blogspot.com/2007/12/haskell-fibonacci-revisited.html 167. http://blog.moertel.com/articles/2007/12/17/pxsl-tools-1-0-your-ticket-out-of-xml-hell 168. http://www.goesping.org/archives/2007/12/18/haskell-is-kind-of-cool/ 169. http://www.robdickerson.net/?p=12 170. http://www.kennknowles.com/blog/2007/12/20/infinite-lazy-knuth-bendix-completion-for-monoids-in-haskell/ 171. http://blog.closuretohome.com/2007/12/hugs-for-nintendo-ds.html 172. http://lambdalounge.blogspot.com/2007/12/my-type-of-language.html 173. http://lorenzod8n.wordpress.com/2007/12/22/catching-pods-with-hpodder/ 174. http://conway.rutgers.edu/~ccshan/wiki/blog/posts/Hamming/ 175. http://blog.closuretohome.com/2008/01/sharper-function-operators.html * [176]Xiangqiboard: play Xiangqi against a computer opponent * [177]Haskell is kind of cool * [178]FParsec - A Parser Combinator Library for F# * [179]RSA-Haskell * [180]LLVM bindings for Haskell * [181]perpubplat 0.9 - You're Looking at It: blog framework for Haskell * [182]The point of pointfree * [183]qtHaskell * [184]Web Objects and the underappreciated recursive do * [185]Equality operators in PHP and Haskell 176. http://xiangqiboard.blogspot.com/2007/12/gnuxiangqi-angekndigt.html 177. http://www.goesping.org/archives/2007/12/18/haskell-is-kind-of-cool/ 178. http://www.quanttec.com/fparsec/ 179. http://netsuperbrain.com/rsa-haskell.html 180. http://www.serpentine.com/blog/2008/01/03/llvm-bindings-for-haskell/ 181. http://mult.ifario.us/p/perpubplat-0-9-you-re-looking-at-it 182. http://www.vex.net/~trebla/weblog/pointfree.html 183. http://qthaskell.sourceforge.net/ 184. http://www.alpheccar.org/en/posts/show/89 185. http://www.syntaxpolice.org/index.php/?q=node%2F419 * [186]Pushing Haskell's type system to the limits: A reflective JSON serializer * [187]A Wake Up Call for the Logic Programming Community * [188]Design your functions for partial application * [189]Taxicab Numbers * [190]Composing Contracts * [191]HTTP content-type comparison at the type level * [192]Haskell-Join-Rules * [193]Exploring JPEG * [194]What's interesting to me about SquirrelMail attack * [195]Haskell and F#: Language Design 186. http://lingnerd.blogspot.com/2007/12/pushing-haskells-type-system-to-limits.html 187. http://www.cs.kuleuven.ac.be/~dtai/projects/ALP/newsletter/dec07/content/Articles/tom/content.html 188. http://www.serpentine.com/blog/2007/12/26/design-your-functions-for-partial-application/ 189. http://notes-on-haskell.blogspot.com/2007/12/taxicab-numbers.html 190. http://contracts.scheming.org/ 191. http://www.alpheccar.org/en/posts/show/88 192. http://taichi.ddns.comp.nus.edu.sg/taichiwiki/HaskellJoinRules 193. http://www.imperialviolet.org/binary/jpeg/ 194. http://www.syntaxpolice.org/index.php/?q=node%2F418 195. http://corsis.blogspot.com/2008/01/haskell-and-f-language-design.html * [196]An example of Haskell's beauty * [197]My resolve to learn Haskell has become stronger after having watched 'A Taste of Haskell' * [198]Emacs love w/ Haskell * [199]Finding my way * [200]Why not Scala? * [201]A Different Kind of Obscurity * [202]Languages that save you some typing 196. http://blog.whoop.as/?p=1668 197. http://rmathew.blogspot.com/2008/01/taste-of-haskell.html 198. http://blog.whoop.as/?p=1665 199. http://nointernalmonologue.blogspot.com/2008/01/finding-my-way.html 200. http://unenterprise.blogspot.com/2008/01/why-not-scala.html 201. http://ddvlad.wordpress.com/2007/12/14/a-different-kind-of-obscurity/ 202. http://daltonic.blogspot.com/2008/01/language-that-saves-you-some-typing.html Quotes of the Week * Conal: For me, the heart of functional programming is exactly this separation between model and presentation. The former is naturally functional and compositional, while the latter is often imperative/sequential and not-so-compositional. IO belongs with the latter. * ddarius: has programmed too much in Haskell. He now produces code that -compiles- and works the first time * disspy: If all you know is C, everything begins to look like a segmentation fault. * markedtrees: (On the city of Haskell) Ah yes, Haskell. Where all the types are strong, all the men carry arrows, and all the children are above average. * ola-bini: Haskell's type system is really nice, for example, but OCaml's really feels like half of it exists just to cover up holes in the other half, I'm half way into Erlang, but for several reasons the language feels very primitive. * so1i.warazd: I'm more and more comfortable spending time with Haskell these days. Haskell may not be the next thing, but whatever the next big thing is, it's probably going to have Haskelly fingerprints all over it?.. * sylvan: think that the perceived difficulty in using purely functional programming is probably a bit exaggerated these days, as all it means is 'we're explicit about where side effects occur' * falvo: I really wish that someone would come up with a type-safe replacement for the likes of Python. Oh, wait, it's called Haskell! Unfortunately, I'm forbidden from using Haskell at work. Sigh * Tyler Spaulding: eventually even 'simple' programs will nned multiple threads. Does that mean developers will suddenly flock to Haskell? Again, no. Language designers are well aware of the situation. Sun and Microsoft are constantly working on improving the Java and .NET frameworks. And by the time the average programmer needs it, both will have plenty of support for easy threading * ricky clarkson: Haskell is full of Aha and Hah moments for me * five9a2: Concurrency aside, I find it common to write Haskell code that is as fast as C. It is true that for most things, the C can be tweaked to go a bit faster, but that tweaking needs to be done on a case-by-case basis. In Haskell, it is easier to compose optimized components. Better algorithms beat an optimized compiler any day and using the best algorithms everywhere in C code tends to be painful, error-prone, and usually disparaged as premature optimization. * Jeff Moser: It's been this fear of skills rot that has pushed me to look into Lisp, Haskell, F#, Erlang, and other languages to avoid The Blub Paradox. * NFJS 2008 predictions: If you've never programmed in Haskell, now's a good time to learn, because those concepts and syntax are fast making their way towards you... * The honey monster: With the advent of multi-core CPUs and the promise of many core processors in the near future it occurrs to me that my interest in functional programming languages could not of happened at a more opportune time. It is not that imperative programming languages are not as capable, merely that functional programming languages seem to be more natural fit About the Haskell Weekly News New editions are posted to [203]the Haskell mailing list as well as to [204]the Haskell Sequence and [205]Planet Haskell. [206]RSS is also available, and headlines appear on [207]haskell.org. Headlines are available as [208]PDF. To help create new editions of this newsletter, please see the [209]contributing information. Send stories to dons at galois.com. The darcs repository is available at darcs get [210]http://code.haskell.org/~dons/code/hwn/ 203. http://www.haskell.org/mailman/listinfo/haskell 205. http://planet.haskell.org/ 207. http://haskell.org/ 208. http://code.haskell.org/~dons/code/hwn/archives/20080105.pdf 209. http://haskell.org/haskellwiki/HWN 210. http://code.haskell.org/~dons/code/hwn/ From byorgey at gmail.com Mon Jan 7 10:17:32 2008 From: byorgey at gmail.com (Brent Yorgey) Date: Mon Jan 7 10:11:16 2008 Subject: [Haskell] Question concerning the "Data Parallel Haskell: a status report" paper In-Reply-To: <477FCDE7.3060909@tu-bs.de> References: <477FCDE7.3060909@tu-bs.de> Message-ID: <22fcbd520801070717g10f1b642q730376b55b4c8a7d@mail.gmail.com> On Jan 5, 2008 1:35 PM, Stephan Friedrichs wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hi Haskellers, > > the paper "Data Parallel Haskell: a status report" (Chakravarty, > Leshchinskiy, Peyton Jones, Keller and Marlow) is an important source of > my seminar handout about skeletons and parallelisation. It contains code > samples concerning the ArrElem type family: > > class ArrElem e where > data [:e:] > (!:) :: [:e:] -> Int -> e > > and various instance declarations, e.g.: > > class ArrElem Int where -- sic! > -- ... > > My question is: Is "class ArrElem Int" a typo and should be "instance > ArrElem Int" or did I get something wrong? > > Thanks in advance and a happy new year > - Stephan > Since no one else seems to have responded yet -- that's pretty clearly a typo, should be 'instance' instead of 'class' just as you suppose, and similarly in the two instance declarations that follow after that. Unless there's something weird going on with associated type syntax that I'm not aware of. (?) -Brent -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell/attachments/20080107/cf2553db/attachment.htm From Clemens.Kupke at cwi.nl Mon Jan 7 12:20:25 2008 From: Clemens.Kupke at cwi.nl (Clemens Kupke) Date: Mon Jan 7 12:44:04 2008 Subject: [Haskell] CMCS 2008: Final call for papers Message-ID: <47825F59.6010508@cwi.nl> CMCS 2008 Final Announcement Please excuse multiple copies 9th International Workshop on Coalgebraic Methods in Computer Science http://www.cwi.nl/projects/cmcs08/ Budapest, Hungary April 4-6, 2008 Key Note Speaker: Dexter Kozen (to be confirmed) Invited Speakers: Stefan Milius and Dirk Pattinson The workshop will be held in conjunction with the 11th European Joint Conferences on Theory and Practice of Software ETAPS 2008 March 29 - April 6, 2008 Programme Committee Jiri Adamek (chair, Braunschweig), Corina Cirstea (Southampton), Neil Ghani (Nottingham), H. Peter Gumm (Marburg), Bart Jacobs (Nijmegen), Clemens Kupke (co-chair, Amsterdam), Alexander Kurz (Leicester), Ugo Montanari (Pisa), Larry Moss (Indiana), John Power (Bath), Jan Rutten (Amsterdam), Lutz Schr?der (Bremen), Tarmo Uustalu (Tallinn), Yde Venema (Amsterdam), Hiroshi Watanabe (Osaka). Submissions Two sorts of submissions will be possible this year: Papers to be evaluated by the programme committee for inclusion in the ENTCS proceedings: These papers must be written using ENTCS style files and be of length no greater than 20 pages. They must contain original contributions, be clearly written, and include appropriate reference to and comparison with related work. If a submission describes software, software tools, or their use, it should include all source code that is needed to reproduce the results but is not publicly available. If the additional material exceeds 5 MB, URL's of publicly available sites should be provided in the paper. Short contributions: These will not be published but will be compiled into a technical report of the Technical University of Braunschweig. They should be no more than two pages and may describe work in progress, summarise work submitted to a conference or workshop elsewhere, or in some other way appeal to the CMCS audience. Both sorts of submission should be submitted in postscript or pdf form as attachments to an email to cmcs08@cwi.nl. The email should include the title, corresponding author, and, for the first kind of submission, a text-only one-page abstract. After the workshop, we expect to produce a journal proceedings of extended versions of selected papers to appear in Theoretical Computer Science. Important Dates Deadline for submission of regular papers: January 13, 2008. Notification of acceptance of regular papers: February 11, 2008. Final version for the preliminary proceedings: February 18, 2008. Deadline for submission of short contributions: March 10, 2008. Notification of acceptance of short contributions: March 17, 2008. For more information, please write to cmcs08@cwi.nl From rl at cse.unsw.edu.au Tue Jan 8 00:31:00 2008 From: rl at cse.unsw.edu.au (Roman Leshchinskiy) Date: Tue Jan 8 00:24:47 2008 Subject: [Haskell] Question concerning the "Data Parallel Haskell: a status report" paper In-Reply-To: <477FCDE7.3060909@tu-bs.de> References: <477FCDE7.3060909@tu-bs.de> Message-ID: <47830A94.3030302@cse.unsw.edu.au> Stephan Friedrichs wrote: > > class ArrElem Int where -- sic! > -- ... > > My question is: Is "class ArrElem Int" a typo and should be "instance > ArrElem Int" or did I get something wrong? Yes, that's a typo. Thanks for pointing it out. Roman From david.waern at gmail.com Tue Jan 8 07:28:50 2008 From: david.waern at gmail.com (David Waern) Date: Tue Jan 8 07:22:30 2008 Subject: [Haskell] ANNOUNCE: Haddock version 2.0.0.0 Message-ID: Dear Haskell community, I'm proud to announce the release of Haddock 2.0.0.0! http://www.haskell.org/haddock http://hackage.haskell.org/cgi-bin/hackage-scripts/package/haddock-2.0.0.0 Changes in version 2.0.0.0: * The GHC API is used as the front-end * Haddock now understands all syntax understood by GHC 6.8.2 * Haddock can generate documentation for some of the language extensions in GHC 6.8.2 * Format of module attributes has changed. The only way of specifiying module attributes is via a new OPTIONS_HADDOCK pragma. Example: {-# OPTIONS_HADDOCK hide, prune #-} * Haddock understands literate source files * Add a small library to read Haddock's interface files * Add a flag -B for passing the path to the GHC lib dir * Add a flag --optghc for passing options to GHC * Add a flag --ghc-version for printing the GHC version * Remove --use-package, --allow-missing-html, --ghc-pkg, in favour of only supporting --read-interface * Remove --package flag, the GHC flag -package-name can be used instead * Remove --no-implicit-prelude flag, the GHC flag -XNoImplicitPrelude can be used instead * Hoogle support temporarily removed It should be noted that this version of Haddock is not compatible with interface files from previous versions. Also, currently, when Haddock comes across a GHC language extension that it doesn't know how to render as HTML, it will bail out. If this happens to you, bug me about it, or help out by sending a patch. On the development side, Haddock has been slightly refactored for easier code navigation, and has the beginnings of a test suite. Haddock also ships with (as noted in the list of changes) a small, experimental library that can be used to read its interface files. Tools and IDE-type applications can use this library to e.g. look up the documentation for identifiers. The code repository is at http://code.haskell.org/haddock. David From tase08 at seg.nju.edu.cn Tue Jan 8 09:47:35 2008 From: tase08 at seg.nju.edu.cn (tase08) Date: Tue Jan 8 09:41:35 2008 Subject: [Haskell] Call for papers TASE2008 Message-ID: (Apologies if you have already received this message.) TASE 2008 2nd IEEE Symposium on Theoretical Aspects of Software Engineering Nanjing, China June 17-19, 2008 http://cs.nju.edu.cn/tase08/index.html Large scale software systems and Internet are of growing concern to academia and industry. This poses new challenges to the various aspects of software engineering, for instance, the reliability of software development, web-oriented software architecture and aspect & object-orientation techniques. As a result, new concepts and methodologies are required to enhance the development of software engineering from theoretical aspects. TASE 2008 is a forum for researchers from academia, industry and government to present ideas, results, and ongoing research on theoretical advances in software engineering. TASE 2008 is the second in a series of conference, sponsored by IEEE CS and IFIP. The first TASE conference was held in Shanghai, China, in June 2007. Topics of Interest: Authors are invited to submit high quality technical papers describing original and unpublished work in all theoretical aspects of software engineering. Topics of interest include, but are not limited to: * Requirements Engineering * Specification and Validation * Software Testing * Component-based Development * Model Checking for Software * Software Processes and Workflows * Software Frameworks and Middleware * Software Architectures and Design * Software safety and reliability * Reverse Engineering and Software Maintenance * Aspect and Objected ¨Corientation Techniques * Embedded and Real-time Software * Service-oriented Computing and Web Services * Model-driven Development * Coordination and Feature Interaction * Parallel and Distributed Computing * Logics of Programs * Program Analysis * Semantics and Design of Programming Languages * Type Theory Submission Guidelines: Authors should submit and register their paper through our web-interface at: http://www.easychair.org/conferences/?conf=TASE2008 by January 28, 2008. Submissions must not have been published or be concurrently considered for publication elsewhere. All submissions will be reviewed by at least three members of the program committee. They will be judged on the basis of originality, contribution to the field, technical and presentation quality, and relevance to the conference. The proceedings of the conference will be published by the IEEE Computer Society Press. Papers must be written in English and not exceed 8 pages in IEEE format. Instructions for authors are available at http://computer.org/cspress/instruct.htm. Latex document classes can be downloaded from the website at ftp://pubftp.computer.org/Press/Outgoing/proceedings/. Important Dates: * January 21, 2008: Title and abstract submission deadline * January 28, 2008: Paper submission deadline * March 10, 2008: Acceptance/rejection notification * March 23, 2008: Camera-ready version due * June 17-19, 2008: TASE 2008 Organization: General Co-Chairs: Jifeng He, East China Normal University, China Jian Lu, Nanjing University, China Program Co-chairs: Jim Davies, Oxford University, UK ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Xuandong Li, Nanjing University, China Local Organization Chair: Linzhang Wang, Nanjing University, China Program Committee: Bernhard Aichernig (Graz University of Technology, Austria) Keijiro Araki (Kyzushu University, Japan) Farhad Arbab (CWI and Leiden University, The Netherlands) Jonathan Bowen (King's College London, UK) Michael Butler (University of Southampton, UK) Ana Cavalcanti (University of York, UK) Jim Davies (Oxford University, UK) Geoff Dromey (Griffith University, Australia) Jin Song Dong (National University of Singapore, Singapore) Zhenhua Duan (Xi¡¯dian University, China) Colin Fidge (Queensland University of Technology, Australia) Dieter Gollmann (Hamburg University of Technology, Germany) Kung-Kiu Lau (Manchester University, UK) Jing Liu (East China Normal University, China) Shaoying Liu (Hosei University, Japan) Zhiming Liu (UNU/IIST, Macau, China) Annabelle Mclver (Macquarie University, Australia) Hong Mei (Peking University, China) Huaikou Miao (Shanghai University, China) Masoud Mohammadian(University of Canberra, Australia) Shankar Natarajan (SRI International, USA) Nimal Nissanke (London South Bank University, UK) Geguang Pu(East China Normal University, China) Shengchao Qin (Durham University, UK) Zongyan Qiu (Peking University, China) Zhong Shao (Yale University, USA) Joseph Sifakis (Verimag, France) Zhengdong Su (University of California at Davis, USA) Margus Veanes (Microsoft, USA) Sergiy Vilkomir (University of Limerick, Ireland) Farn Wang (National Taiwan University, Taiwan) Ji Wang (Changsha Institute of Technology, China) Linzhang Wang(Nanjing University, China) Heike Wehrheim (University of Paderborn, Germany) Jim Woodcock (University of York, UK) Dianxiang Xu(North Dakota State University, USA) Wang Yi (Uppsala University, Sweden) Gianluigi Zavattaro (University of Bologna, Italy) Jian Zhang (Institute of Software, China) Jianhua Zhao (Nanjing University, China) Huibiao Zhu (East China Normal University, China) Steering Program Committee Michael Hinchey(Chair), USA Keijiro Araki, Japan Jifeng He, China Zhiming Liu, Macau Mike Reed, Macau Huibiao Zhu, China Keynote Speakers Edmund M. Clarke (Carnegie Mellon University) Joost-Pieter Katoen (RWTH Aachen University) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell/attachments/20080108/d108f609/attachment-0001.htm From bringert at cs.chalmers.se Tue Jan 8 14:35:07 2008 From: bringert at cs.chalmers.se (Bjorn Bringert) Date: Tue Jan 8 14:28:53 2008 Subject: [Haskell] What dates are best for a hackathon in Gothenburg? Message-ID: We are planning to hold the 4th Haskell Hackathon in Gothenburg in April. If you would be at all interested in coming, please indicate which of the three candidate dates Apr 4-6, Apr 11-13, or Apr 18-20 suit you by editing: http://www.haskell.org/haskellwiki/Hac_2008/Dates If you haven't been to a Haskell Hackathon before, check out the web page from the 3rd hackathon which was held in Freiburg in October: http://www.haskell.org/haskellwiki/Hac_2007_II /Bj?rn From felipe.lessa at gmail.com Tue Jan 8 15:09:05 2008 From: felipe.lessa at gmail.com (Felipe Lessa) Date: Tue Jan 8 15:02:46 2008 Subject: [Haskell] ANNOUNCE: Haddock version 2.0.0.0 In-Reply-To: References: Message-ID: On Jan 8, 2008 10:28 AM, David Waern wrote: > * Haddock now understands all syntax understood by GHC 6.8.2 Does Haddock still define __HADDOCK__? There's a lot of code that uses this flag just to hide something Haddock didn't know. -- Felipe. From andres at cs.uu.nl Tue Jan 8 17:49:18 2008 From: andres at cs.uu.nl (Andres Loeh) Date: Tue Jan 8 17:42:57 2008 Subject: [Haskell] 2nd ANNOUNCE: HCAR 12/2007 Message-ID: <20080108224918.GF32536@cs.uu.nl> Hi everyone. [For everyone who missed the first announcement because they were already in the holidays ...] The December 2007 edition of the Haskell Communities and Activities Report is out and available for download from http://haskell.org/communities Cheers, Andres -- Andres Loeh, Universiteit Utrecht mailto:andres@cs.uu.nl mailto:mail@andres-loeh.de http://www.andres-loeh.de From simonpj at microsoft.com Wed Jan 9 04:40:14 2008 From: simonpj at microsoft.com (Simon Peyton-Jones) Date: Wed Jan 9 04:33:53 2008 Subject: [Haskell] 2nd ANNOUNCE: HCAR 12/2007 In-Reply-To: <20080108224918.GF32536@cs.uu.nl> References: <20080108224918.GF32536@cs.uu.nl> Message-ID: <638ABD0A29C8884A91BC5FB5C349B1C30BA9B71263@EA-EXMSG-C334.europe.corp.microsoft.com> Thank you Andres! As always it's amazing how much is going on in Haskell land, and running the Haskell Communities and Activities Report is a real service to our community. You are a star. Everyone else: I see that Andres would like to hand on the HCAR editor-ship to someone else. Get in touch with him -- don't be shy! This would be a great way for you to contribute. Simon | -----Original Message----- | From: Andres Loeh | Sent: 08 January 2008 22:49 | To: haskell@haskell.org | Subject: [Haskell] 2nd ANNOUNCE: HCAR 12/2007 | | Hi everyone. | | [For everyone who missed the first announcement because they were | already in the holidays ...] | | The December 2007 edition of the Haskell Communities and Activities | Report is out and available for download from | | http://haskell.org/communities | | Cheers, | Andres From venanzio at cs.ru.nl Wed Jan 9 06:19:07 2008 From: venanzio at cs.ru.nl (Venanzio Capretta) Date: Wed Jan 9 06:12:46 2008 Subject: [Haskell] MSFP call for papers Message-ID: <4784ADAB.8010607@cs.ru.nl> CALL FOR PAPERS Second Workshop on MATHEMATICALLY STRUCTURED FUNCTIONAL PROGRAMMING 6 July 2008, Reykjavik - Iceland A satellite workshop of ICALP 2008 PRESENTATION The workshop on Mathematically Structured Functional Programming is devoted to the derivation of functionality from structure. It is a celebration of the direct impact of Theoretical Computer Science on programs as we write them today. Modern programming languages, and in particular functional languages, support the direct expression of mathematical structures, equipping programmers with tools of remarkable power and abstraction. Monadic programming in Haskell is the paradigmatic example, but there are many more mathematical insights manifest in programs and in programming language design: Freyd-categories in reactive programming, symbolic differentiation yielding context structures, and comonadic presentations of dataflow, to name but three. This workshop is a forum for researchers who seek to reflect mathematical phenomena in data and control. The first MSFP workshop was held in Kuressaare, Estonia, in July 2006. An associated special issue of the Journal of Functional Programming is in preparation. SUBMISSIONS Electronic Notes in Theoretical Computer Science have provisionally agreed to publish the proceedings of MSFP 2008. ENTCS require submissions in LaTeX, formatted according to their guidelines (http://www.entcs.org/prelim.html). Papers must report previously unpublished work and not be submitted concurrently to another conference with refereed proceedings. Programme Committee members, barring the co-chairs, may (and indeed are encouraged) to contribute. Accepted papers must be presented at the workshop by one of the authors. There is no specific page limit, but authors should strive for brevity. We are using the EasyChair software to manage submissions. To submit a paper, please log in at: http://www.easychair.org/conferences/?conf=msfp2008. TIMELINE: Submission of abstracts: 4 April Submission of papers: 11 April Notification: 16 May Final versions due: 13 June Workshop: 6 July For more information about the workshop, go to: http://msfp.org.uk/ Programme Committee * Yves Bertot, INRIA, Sophia-Antipolis, France * Venanzio Capretta (co-chair), Radboud University, Nijmegen, The Netherlands * Jacques Carette, McMaster University, Hamilton, Ontario, Canada * Thierry Coquand, Chalmers University, G?teborg, Sweden * Andrzej Filinski, DIKU, University of Copenhagen, Denmark * Jean-Christophe Filli?tre, LRI, Universit? Paris Sud, France * Jeremy Gibbons, Oxford University, England * Andy Gill, Galois Inc., Portland, Oregon, USA * Peter Hancock, University of Nottingham, England * Oleg Kiselyov, FNMOC, Monterey, California, USA * Paul Blain Levy, University of Birmingham, England * Andres L?h, Utrecht University, The Netherlands * Marino Miculan, Universit? di Udine, Italy * Conor McBride (co-chair), Alta Systems, Northern Ireland * James McKinna, Radboud University, Nijmegen, The Netherlands * Alex Simpson, University of Edinburgh, Scotland * Tarmo Uustalu, Institute of Cybernetics, Tallinn, Estonia From simonmarhaskell at gmail.com Wed Jan 9 07:03:24 2008 From: simonmarhaskell at gmail.com (Simon Marlow) Date: Wed Jan 9 06:57:09 2008 Subject: [Haskell] ANNOUNCE: Haddock version 2.0.0.0 In-Reply-To: References: Message-ID: <4784B80C.1070004@gmail.com> Felipe Lessa wrote: > On Jan 8, 2008 10:28 AM, David Waern wrote: >> * Haddock now understands all syntax understood by GHC 6.8.2 > > Does Haddock still define __HADDOCK__? There's a lot of code that uses > this flag just to hide something Haddock didn't know. Haddock itself never defined __HADDOCK__, because it didn't do the CPP preprocessing itself. Cabal adds __HADDOCK__ itself when preprocessing files for passing to Haddock. When used with Haddock version 2, Cabal no longer defines __HADDOCK__ when preprocessing. Haddock 2 can do the preprocessing itself, because it is processing the Haskell files using the GHC API. In this case, if you want __HADDOCK__ defined, you have to add it explicitly with --optghc -D__HADDOCK__. The easiest way to use Haddock 2 is via Cabal, which will automatically add the appropriate options for your package, including the right -B option which Haddock now needs in order that the GHC API can find its package database. Cheers, Simon From felipe.lessa at gmail.com Wed Jan 9 10:54:00 2008 From: felipe.lessa at gmail.com (Felipe Lessa) Date: Wed Jan 9 10:47:40 2008 Subject: [Haskell] ANNOUNCE: Haddock version 2.0.0.0 In-Reply-To: <4784B80C.1070004@gmail.com> References: <4784B80C.1070004@gmail.com> Message-ID: Now I see. Thanks David and Simon for the clarifications! =) -- Felipe. From jpeliz at icmc.usp.br Wed Jan 9 11:23:46 2008 From: jpeliz at icmc.usp.br (Jorge Marques Pelizzoni) Date: Wed Jan 9 11:17:33 2008 Subject: [Haskell] detecting existing instances Message-ID: <45848.200.158.222.185.1199895826.squirrel@mail2.icmc.usp.br> Hi, all! I guess this belongs to haskell-cafe or glasgow-haskell-users, but I've already been there and got no replies. Thanks in advance for anyone taking the time to read on. Given two type classes A t and B t, I'd like the typechecker to derive different A t instances depending exactly on whether t is an instance of B. In other words, is it possible to define a class (actually a type-level function) IsB t f such that: IsB t HTrue <=> instance (B t) exists IsB t HFalse <=> otherwise? If not, is this wish intrisically pointless? After experimenting a bit with multiparameter classes, overlapping instances and suchlike, it looks like Haskell is being purposedly designed not to support this. Yes, I believe that would require the typechecker to take a whole new theorem-proving (undecidable?) stance :o) On the other hand, any interesting type-level programming seems to require undecidable+overlapping instances, so we are usually working on undecidable grounds... Sorry if this is an overdebated matter (is it?), but searching through the endless haskell archives is not trivial. Thanks in advance for any pointers or thoughts on the matter. Cheers, Jorge. From cetin at sertcom.de Wed Jan 9 12:16:15 2008 From: cetin at sertcom.de (Cetin Sert) Date: Wed Jan 9 12:10:13 2008 Subject: [Haskell] Problems with Unicode Symbols as Infix Function Names in Propositional Calculus Haskell DSL Message-ID: I want to design a DSL in Haskell for propositional calculus. But instead of using natural language names for functions like or, and, implies etc. I want to use Unicode symbols as infix functions ?, ?, ?, ?, ? But I keep getting error messages from the GHC parser. Is there a way to make GHC parse my source files correctly? If it is not possible yet, please consider this as a ?feature request?. Best Regards, Cetin Sert INF 521, 4-6-2 69120 Heidelberg Germany http://www.corsis.de -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell/attachments/20080109/fe1deb55/attachment.htm From taralx at gmail.com Wed Jan 9 14:22:13 2008 From: taralx at gmail.com (Taral) Date: Wed Jan 9 14:15:52 2008 Subject: [Haskell] detecting existing instances In-Reply-To: <45848.200.158.222.185.1199895826.squirrel@mail2.icmc.usp.br> References: <45848.200.158.222.185.1199895826.squirrel@mail2.icmc.usp.br> Message-ID: On 1/9/08, Jorge Marques Pelizzoni wrote: > Given two type classes A t and B t, I'd like the typechecker to derive > different A t instances depending exactly on whether t is an instance of > B. I think this would require some kind of whole-program analysis. While Haskell provides assertions that t is an instance of B (B t), it does *not* provide assertions that t is not an instance of B. This is because an instance of B can be declared by other modules at a later point (e.g. by someone who imports your module). -- Taral "Please let me know if there's any further trouble I can give you." -- Unknown From rlaemmel at gmail.com Wed Jan 9 15:10:59 2008 From: rlaemmel at gmail.com (Ralf Laemmel) Date: Wed Jan 9 15:04:34 2008 Subject: [Haskell] detecting existing instances In-Reply-To: <45848.200.158.222.185.1199895826.squirrel@mail2.icmc.usp.br> References: <45848.200.158.222.185.1199895826.squirrel@mail2.icmc.usp.br> Message-ID: > Given two type classes A t and B t, I'd like the typechecker to derive > different A t instances depending exactly on whether t is an instance of > B. In other words, is it possible to define a class (actually a type-level > function) IsB t f such that: A GHC-like type system is in principle powerful enough to do just that. We exploit such capability in HList and OOHaskell. That is, the class whose instance availability should be observed must be first set up to carry an extra functionally dependent type parameter that specifically is meant to report back on instance availability. Then, we sacrifice the capability of a generic default instance for that class to indeed report back the lack of an instance through a type-level False on the new type-parameter position, whereas all normal instances report back type-level True. The usual problem of functional-dependency violation occurs, that is, the generic default instance is not entirely standard because if it says to return False for all types, then the other instances can't claim the opposite unless we had special fundep rules for generic default instances. However, we can recover from that by making the generic default instance vacuously generic in the type-level Boolean result position so that it becomes strictly more general than any specific instance, while we still assign type-level False to the position but by a type-level cast (instead of a verbatim False). Type-level type cast is the type-level programmer's swiss army knife. See the illustration below. HTH, Ralf {-# OPTIONS -fglasgow-exts #-} {-# OPTIONS -fallow-overlapping-instances #-} {-# OPTIONS -fallow-undecidable-instances #-} module M2 where import M1 instance TypeCast x x where typeCast = id main = do print $ b $ hasInstance ST1 print $ b $ hasInstance ST2 {-# OPTIONS -fglasgow-exts #-} {-# OPTIONS -fallow-overlapping-instances #-} {-# OPTIONS -fallow-undecidable-instances #-} module M1 where -- Type-level Booleans data T -- True data F -- False class B x where b :: x -> Bool instance B T where b = const True instance B F where b = const False -- Sample types data ST1 = ST1 data ST2 = ST2 -- A class that reports on instance availability class B b => R x b | x -> b instance R ST1 T instance (B b, TypeCast F b) => R x b -- generically missing instance -- Observe instance availability hasInstance :: R x b => x -> b hasInstance _ = undefined -- The key weapon class TypeCast x y | x -> y, y -> x where typeCast :: x -> y From jpeliz at icmc.usp.br Wed Jan 9 16:24:51 2008 From: jpeliz at icmc.usp.br (Jorge Marques Pelizzoni) Date: Wed Jan 9 16:18:29 2008 Subject: [Haskell] detecting existing instances In-Reply-To: References: <45848.200.158.222.185.1199895826.squirrel@mail2.icmc.usp.br> Message-ID: <61497.200.158.222.185.1199913891.squirrel@mail2.icmc.usp.br> Thank you very much, Ralf, for your very thorough reply. That's a very general way to deal with the issue. It never occurred to me that the "inspected" class itself might carry the availability info. Cheers, Jorge. Ralf Laemmel escreveu: >> Given two type classes A t and B t, I'd like the typechecker to derive >> different A t instances depending exactly on whether t is an instance of >> B. In other words, is it possible to define a class (actually a >> type-level >> function) IsB t f such that: > > A GHC-like type system is in principle powerful enough to do just > that. We exploit such capability in HList and OOHaskell. That is, the > class whose instance availability should be observed must be first set > up to carry an extra functionally dependent type parameter that > specifically is meant to report back on instance availability. Then, > we sacrifice the capability of a generic default instance for that > class to indeed report back the lack of an instance through a > type-level False on the new type-parameter position, whereas all > normal instances report back type-level True. The usual problem of > functional-dependency violation occurs, that is, the generic default > instance is not entirely standard because if it says to return False > for all types, then the other instances can't claim the opposite > unless we had special fundep rules for generic default instances. > However, we can recover from that by making the generic default > instance vacuously generic in the type-level Boolean result position > so that it becomes strictly more general than any specific instance, > while we still assign type-level False to the position but by a > type-level cast (instead of a verbatim False). > > Type-level type cast is the type-level programmer's swiss army knife. > > See the illustration below. > > HTH, > Ralf > > > {-# OPTIONS -fglasgow-exts #-} > {-# OPTIONS -fallow-overlapping-instances #-} > {-# OPTIONS -fallow-undecidable-instances #-} > > module M2 where > > import M1 > > instance TypeCast x x where typeCast = id > > main = > do > print $ b $ hasInstance ST1 > print $ b $ hasInstance ST2 > > > {-# OPTIONS -fglasgow-exts #-} > {-# OPTIONS -fallow-overlapping-instances #-} > {-# OPTIONS -fallow-undecidable-instances #-} > > module M1 where > > -- Type-level Booleans > data T -- True > data F -- False > class B x where b :: x -> Bool > instance B T where b = const True > instance B F where b = const False > > -- Sample types > data ST1 = ST1 > data ST2 = ST2 > > -- A class that reports on instance availability > class B b => R x b | x -> b > instance R ST1 T > instance (B b, TypeCast F b) => R x b -- generically missing instance > > -- Observe instance availability > hasInstance :: R x b => x -> b > hasInstance _ = undefined > > -- The key weapon > class TypeCast x y | x -> y, y -> x > where > typeCast :: x -> y > Jorge M. Pelizzoni ICMC - Universidade de S?o Paulo From dave at zednenem.com Thu Jan 10 02:38:00 2008 From: dave at zednenem.com (David Menendez) Date: Thu Jan 10 02:31:34 2008 Subject: [Haskell] detecting existing instances In-Reply-To: References: <45848.200.158.222.185.1199895826.squirrel@mail2.icmc.usp.br> Message-ID: <49a77b7a0801092338r141ed29dsbcaca81ac6b115eb@mail.gmail.com> On Jan 9, 2008 3:10 PM, Ralf Laemmel wrote: > > Type-level type cast is the type-level programmer's swiss army knife. > See the illustration below. > Does this get any easier with type families? Your (TypeCast a b) seems similar in intent to (a ~ b), but I'm not familiar enough with the latter to know whether it would work here. -- Dave Menendez -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell/attachments/20080110/79c94fca/attachment.htm From gvidal at dsic.upv.es Thu Jan 10 04:25:13 2008 From: gvidal at dsic.upv.es (German Vidal) Date: Thu Jan 10 04:18:48 2008 Subject: [Haskell] SAS 2008 - Final CFP Message-ID: 15th International Static Analysis Symposium - SAS 2008 Valencia, Spain - July 16-18 >>Just 2 days to go to the abstract submission deadline<< Important dates: Submission of abstract: January 12, 2008 Submission of full paper: January 19, 2008 Notification: March 7, 2008 Camera-ready version: April 5, 2008 Conference: July 16-18, 2008 Please see: http://www.dsic.upv.es/~sas2008/ Maria Alpuente, German Vidal (PC co-chairs) Email: sas2008@dsic.upv.es From wss at Cs.Nott.AC.UK Fri Jan 11 06:49:09 2008 From: wss at Cs.Nott.AC.UK (Wouter Swierstra) Date: Fri Jan 11 06:43:40 2008 Subject: [Haskell] The Monad.Reader (10) - Second call for copy Message-ID: <39F5DBA4-4079-467B-A101-6B08ADE551E6@Cs.Nott.AC.UK> Call for Copy The Monad.Reader - Issue 10 It is not too late to consider writing something for the next issue of The Monad.Reader. The deadline for Issue 10 is ** January 25, 2007 ** It doesn't matter if you're an established academic or if you have only just started learning Haskell, if you have something to say, please write article for The Monad.Reader. The Monad.Reader is a electronic magazine about all things Haskell. It is less-formal than journal, but somehow more enduring than a wiki- page. There have been a wide variety of articles, including: exciting code fragments, intriguing puzzles, book reviews, tutorials, and even half-baked research ideas. * Submission Details * Get in touch with me if you intend to submit something -- the sooner you let me know what you're up to, the better. Please submit articles for the next issue to me by e-mail (wss at cs.nott.ac.uk). Articles should be written according to the guidelines available from http://www.haskell.org/haskellwiki/The_Monad.Reader Please submit your article in PDF, together with any source files you used. The sources will be released together with the magazine under a BSD license. If you would like to submit an article, but have trouble with LaTeX please let me know and we'll sort something out. All the best, Wouter This message has been checked for viruses but the contents of an attachment may still contain software viruses, which could damage your computer system: you are advised to perform your own checks. Email communications with the University of Nottingham may be monitored as permitted by UK legislation. From dominic.steinitz at blueyonder.co.uk Sat Jan 12 11:41:54 2008 From: dominic.steinitz at blueyonder.co.uk (Dominic Steinitz) Date: Sat Jan 12 11:54:58 2008 Subject: [Haskell] ANN: Haskell Cryptographic Library 4.1.0 Message-ID: <4788EDD2.4050605@blueyonder.co.uk> I'd like to announce the release of a new version of the library following various contributions (contributors are bcc'd). Additions include: BubbleBabble, TEA, HMAC and more large word support. It no longer includes Base64. This is provided by http://hackage.haskell.org/cgi-bin/hackage-scripts/package/dataenc-0.10.1. Many thanks to all contributors. Dominic. PS I always mention this but the library really needs to be reviewed holistically and possibly restructured given the advent of bytestrings. If anyone would like to volunteer to do this or take over as library maintainer, please let me know. From dons at galois.com Sat Jan 12 23:19:23 2008 From: dons at galois.com (Don Stewart) Date: Sat Jan 12 23:13:03 2008 Subject: [Haskell] ANNOUNCE: pcre-light, a light, portable regular expression library for Haskell Message-ID: <20080113041923.GC14000@scytale.galois.com> pcre-light A light regular expression library, using Perl 5 compatible regexes I'm pleased to announce the first release of pcre-light. This library provides a simple, efficient interface to PCRE regular expressions, via either strict ByteStrings or classical Strings. Compilation and matching of regular expressions is done via two functions: compile :: ByteString -> [PCREOption] -> Either String Regex match :: Regex -> ByteString -> [PCREExecOption] -> Maybe [ByteString] A convenience interface for 'Char8' Strings is also provided. == Examples == Although the operations by default take ByteStrings, we can avoid unnecessary 'pack' calls using GHC's support for ByteStrings literals, enabled with -XOverloadedStrings: > :m + Text.Regex.PCRE.Light > :m + Data.ByteString.Char8 > :set -XOverloadedStrings > let Right r = compile "the quick brown fox" [] > match r "the quick brown fox" [] Just ["the quick brown fox"] > match r "the quick brown FOX" [] Nothing We can also enable various matching extensions, > let Right r = compile "the quick brown fox" [caseless] > match r "the quick brown FOX" [] Just ["the quick brown FOX"] Subpatterns, and fancy Perl regex extensions are happily supported: > let Right r = compile "^(abc){1,2}zz" [] > match r "abczz" [] Just ["abczz","abc"] Where the subpattern bound by ( ) was returned as the second element of the list. > let Right r = compile "\\w+(?=\t)" [] > match r "the quick brown\t fox" [] Just ["brown"] You can do lots of silly things with this: > let Right r = compile "^(a()+)+" [] > match r "aaaa" Just ["aaaa", "a", ""] The full set of compile and runtime PCRE extensions are supported. == Get it == * Stable tarballs, (on Hackage, of course): http://hackage.haskell.org/cgi-bin/hackage-scripts/package/pcre-light * Cabal install it! Using the new 'cabal-install', you can automatically download, build and install the package: $ cabal update $ cabal install pcre-light Downloading 'pcre-light-0.1'... Configuring pcre-light-0.1... Preprocessing library pcre-light-0.1... Building pcre-light-0.1... Registering pcre-light-0.1.. And off we go! For more information about cabal-install, see the hackage page for this excellent tool. * Darcs repository: http://code.haskell.org/~dons/code/pcre-light/ * Documentation: http://code.haskell.org/~dons/docs/pcre-light/ * Stability The library takes correctness seriously, and comes with a reasonable testsuite (with plans to greatly extend it), and code coverage data for those tests (using GHC's new -fhpc flag). You can see the test coverage results here: http://code.haskell.org/~dons/tests/pcre-light/hpc_index.html Yours in code, Don P.S. I'd like to encourage other authors to distribute code coverage results for their libraries! hpc is an invaluable tool to ensure high quality libraries for the Haskell community. P.P.S. Consider consider contributing your own light bindings to useful C libraries. The more we have, the more certain and sustainable Haskell development will be :) P.P.P.S. Thanks to #haskell for testing and advice. From tase08 at seg.nju.edu.cn Sun Jan 13 10:38:55 2008 From: tase08 at seg.nju.edu.cn (tase08) Date: Sun Jan 13 10:32:29 2008 Subject: [Haskell] Final Call for papers TASE2008 Message-ID: (Apologies if you have already received this message.) TASE 2008 2nd IEEE Symposium on Theoretical Aspects of Software Engineering Nanjing, China June 17-19, 2008 http://cs.nju.edu.cn/tase08/index.html Large scale software systems and Internet are of growing concern to academia and industry. This poses new challenges to the various aspects of software engineering, for instance, the reliability of software development, web-oriented software architecture and aspect & object-orientation techniques. As a result, new concepts and methodologies are required to enhance the development of software engineering from theoretical aspects. TASE 2008 is a forum for researchers from academia, industry and government to present ideas, results, and ongoing research on theoretical advances in software engineering. TASE 2008 is the second in a series of conference, sponsored by IEEE CS and IFIP. The first TASE conference was held in Shanghai, China, in June 2007. Topics of Interest: Authors are invited to submit high quality technical papers describing original and unpublished work in all theoretical aspects of software engineering. Topics of interest include, but are not limited to: * Requirements Engineering * Specification and Validation * Software Testing * Component-based Development * Model Checking for Software * Software Processes and Workflows * Software Frameworks and Middleware * Software Architectures and Design * Software safety and reliability * Reverse Engineering and Software Maintenance * Aspect and Objected ¨Corientation Techniques * Embedded and Real-time Software * Service-oriented Computing and Web Services * Model-driven Development * Coordination and Feature Interaction * Parallel and Distributed Computing * Logics of Programs * Program Analysis * Semantics and Design of Programming Languages * Type Theory Submission Guidelines: Authors should submit and register their paper through our web-interface at: http://www.easychair.org/conferences/?conf=TASE2008 by January 28, 2008. Submissions must not have been published or be concurrently considered for publication elsewhere. All submissions will be reviewed by at least three members of the program committee. They will be judged on the basis of originality, contribution to the field, technical and presentation quality, and relevance to the conference. The proceedings of the conference will be published by the IEEE Computer Society Press. Papers must be written in English and not exceed 8 pages in IEEE format. Instructions for authors are available at http://computer.org/cspress/instruct.htm. Latex document classes can be downloaded from the website at ftp://pubftp.computer.org/Press/Outgoing/proceedings/. Important Dates: * January 21, 2008: Title and abstract submission deadline * January 28, 2008: Paper submission deadline * March 10, 2008: Acceptance/rejection notification * March 23, 2008: Camera-ready version due * June 17-19, 2008: TASE 2008 Organization: General Co-Chairs: Jifeng He, East China Normal University, China Jian Lu, Nanjing University, China Program Co-chairs: Jim Davies, Oxford University, UK ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Xuandong Li, Nanjing University, China Local Organization Chair: Linzhang Wang, Nanjing University, China Program Committee: Bernhard Aichernig (Graz University of Technology, Austria) Keijiro Araki (Kyzushu University, Japan) Farhad Arbab (CWI and Leiden University, The Netherlands) Jonathan Bowen (King's College London, UK) Michael Butler (University of Southampton, UK) Ana Cavalcanti (University of York, UK) Jim Davies (Oxford University, UK) Geoff Dromey (Griffith University, Australia) Jin Song Dong (National University of Singapore, Singapore) Zhenhua Duan (Xi¡¯dian University, China) Colin Fidge (Queensland University of Technology, Australia) Dieter Gollmann (Hamburg University of Technology, Germany) Kung-Kiu Lau (Manchester University, UK) Jing Liu (East China Normal University, China) Shaoying Liu (Hosei University, Japan) Zhiming Liu (UNU/IIST, Macau, China) Annabelle Mclver (Macquarie University, Australia) Hong Mei (Peking University, China) Huaikou Miao (Shanghai University, China) Masoud Mohammadian(University of Canberra, Australia) Shankar Natarajan (SRI International, USA) Nimal Nissanke (London South Bank University, UK) Geguang Pu(East China Normal University, China) Shengchao Qin (Durham University, UK) Zongyan Qiu (Peking University, China) Zhong Shao (Yale University, USA) Joseph Sifakis (Verimag, France) Zhengdong Su (University of California at Davis, USA) Margus Veanes (Microsoft, USA) Sergiy Vilkomir (University of Limerick, Ireland) Farn Wang (National Taiwan University, Taiwan) Ji Wang (Changsha Institute of Technology, China) Linzhang Wang(Nanjing University, China) Heike Wehrheim (University of Paderborn, Germany) Jim Woodcock (University of York, UK) Dianxiang Xu(North Dakota State University, USA) Wang Yi (Uppsala University, Sweden) Gianluigi Zavattaro (University of Bologna, Italy) Jian Zhang (Institute of Software, China) Jianhua Zhao (Nanjing University, China) Huibiao Zhu (East China Normal University, China) Steering Program Committee Michael Hinchey(Chair), USA Keijiro Araki, Japan Jifeng He, China Zhiming Liu, Macau Mike Reed, Macau Huibiao Zhu, China Keynote Speakers Edmund M. Clarke (Carnegie Mellon University) Joost-Pieter Katoen (RWTH Aachen University) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell/attachments/20080113/e106309f/attachment-0001.htm From s.clover at gmail.com Mon Jan 14 02:47:40 2008 From: s.clover at gmail.com (Sterling Clover) Date: Mon Jan 14 02:41:14 2008 Subject: [Haskell] ANNOUNCE: HStringTemplate -- An Elegant, Functional, Nifty Templating Engine for Haskell Message-ID: <89B71013-9550-4E1F-91DD-A4ABD532F2F1@gmail.com> HStringTemplate is a port of Terrence Parr?s lovely StringTemplate (http://www.stringtemplate.org) engine to Haskell. It is available, cabalized, at: darcs get http://code.haskell.org/HStringTemplate/ As interest has grown in using Haskell for web applications, there has been an increasing buzz about the need for a good templating engine in Haskell. Why might we need this? After all, Haskell has lovely combinator libraries for generating HTML programmatically, enforcing good form through its type system. But sometimes, we don?t want well-formed HTML. We want the ugly stuff that floats around to deal with eight varieties of browser incompatibilities and the latest silly ajax trick. Or sometimes we?re working with a team of graphic designers, and they want to work in almost-HTML. Or sometimes we just want to be able to change the design of a web application on the fly, completely independent of our program logic, and of, heavens forbid, recompiling and possibly messing with a live application. So template engines are popular, and indeed, considered a key part of most web frameworks out there. One problem ? they?re mainly awful, imperatively-conceived behemoths that capriciously mix program logic with display and, consequently, entail a great deal of overhead. Enter StringTemplate, a nifty and fairly-well developed template format that?s both pure and functional, and therefore pretty much the only one of its kind. Indeed, it also seems to be getting heavy use in code generation because its paradigm maps neatly to traversing parse-trees. HStringTemplate is not feature-complete, and indeed is only at version 0.1. But it should implement pretty much everything in the standard StringTemplate 3.0 grammar, only nicer, because it?s in Haskell. There are scads of different recursive constructs and ways to handle inclusion and inheritance. Furthermore, HStringTemplate handles conditionals, and sports also a very Haskellish implementation of custom rendering. Templates can be constructed that return strings, ShowSs, bytestrings, or even pretty printer Docs that handle wrapping, indentation, and fill elegantly. Even better, these templates are parsed and compiled only once, after which point there isn't a syntax tree anymore, just a function that operates on the environment of attributes that have been passed to it. Where I take it from here depends in part on what sort of response I get, so patches, gripes, API comments and feature requests are all more than welcome. Please note that I'm still working in 6.6.1. Everything should be in place to compile properly with the base split, but if it isn't, again, patches more than welcome. Full announcement at: http://fmapfixreturn.wordpress.com/ --SC From waldmann at imn.htwk-leipzig.de Mon Jan 14 04:32:15 2008 From: waldmann at imn.htwk-leipzig.de (Johannes Waldmann) Date: Mon Jan 14 04:25:37 2008 Subject: [Haskell] ANNOUNCE: HStringTemplate -- An Elegant, Functional, Nifty Templating Engine for Haskell In-Reply-To: <89B71013-9550-4E1F-91DD-A4ABD532F2F1@gmail.com> References: <89B71013-9550-4E1F-91DD-A4ABD532F2F1@gmail.com> Message-ID: <478B2C1F.5000402@imn.htwk-leipzig.de> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Sterling Clover wrote: > Templates can be constructed that return strings, ShowSs, bytestrings, > or even pretty printer Docs that handle wrapping, indentation, and fill > elegantly. Even better, these templates are parsed and compiled only > once, after which point there isn't a syntax tree anymore, just a > function that operates on the environment of attributes that have been > passed to it. Ah! Finally! They invented Lambda Calculus! Perhaps after some more decades they invent Typed Lambda Calculus as well! (sorry, couldn't resist - Best regards, J.W.) -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.4-svn0 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFHiywR3ZnXZuOVyMIRAtGtAKCzfpu9PktmsatKHlM5I2CH4ysR8gCgibat eznCg3FyVJ4tsg/tOvRV8Qs= =4MoX -----END PGP SIGNATURE----- From ndmitchell at gmail.com Mon Jan 14 13:12:45 2008 From: ndmitchell at gmail.com (Neil Mitchell) Date: Mon Jan 14 13:06:04 2008 Subject: [Haskell] ANN: TagSoup 0.4 Message-ID: <404396ef0801141012m5710c76ai201a0725fb7aba79@mail.gmail.com> Hi, I am pleased to release TagSoup 0.4, available (like all good libraries) from hackage: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/tagsoup-0.4. For more details, including examples, read the manual: http://www.cs.york.ac.uk/fp/darcs/tagsoup/tagsoup.htm TagSoup is a library for extracting information out of unstructured HTML code, sometimes known as tag-soup. The HTML does not have to be well formed, or render properly within any particular framework. This library is for situations where the author of the HTML is not cooperating with the person trying to extract the information, but is also not trying to hide the information. Version 0.4 fixes various space leaks, improves the interface, deals with entities better etc. The API has changed somewhat, but should be simpler overall - if I broke your code and you need help, email me. TagSoup is used for writing Haskell Weekly News, processing biological simulations, getting cooking recipies, optimising train fares, getting a list of Simon Peyton Jones' papers, getting a hit count off haskell.org and no doubt many other fun things. Thanks Neil From corentin.dupont at gmail.com Mon Jan 14 15:04:10 2008 From: corentin.dupont at gmail.com (Dupont Corentin) Date: Mon Jan 14 14:57:31 2008 Subject: [Haskell] matrix In-Reply-To: <18a05e6b0801141201h24358a1g9585f1baed0ef6d2@mail.gmail.com> References: <18a05e6b0801141201h24358a1g9585f1baed0ef6d2@mail.gmail.com> Message-ID: <18a05e6b0801141204u12e02a84y8b86958123096cc8@mail.gmail.com> Hello, Is a package with matrices, rotations, translations etc? Sorry for the newbie question! Corentin From dons at galois.com Mon Jan 14 15:07:58 2008 From: dons at galois.com (Don Stewart) Date: Mon Jan 14 15:01:24 2008 Subject: [Haskell] matrix In-Reply-To: <18a05e6b0801141204u12e02a84y8b86958123096cc8@mail.gmail.com> References: <18a05e6b0801141201h24358a1g9585f1baed0ef6d2@mail.gmail.com> <18a05e6b0801141204u12e02a84y8b86958123096cc8@mail.gmail.com> Message-ID: <20080114200758.GC24043@scytale.galois.com> corentin.dupont: > Hello, > Is a package with matrices, rotations, translations etc? > Sorry for the newbie question! > Corentin Check on hackage.haskell.org for 3rd party packages. One is * hmatrix: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hmatrix From haskell at list.mightyreason.com Mon Jan 14 16:29:17 2008 From: haskell at list.mightyreason.com (Chris Kuklewicz) Date: Mon Jan 14 16:22:44 2008 Subject: [Haskell] ANNOUNCE: HStringTemplate -- An Elegant, Functional, Nifty Templating Engine for Haskell In-Reply-To: <89B71013-9550-4E1F-91DD-A4ABD532F2F1@gmail.com> References: <89B71013-9550-4E1F-91DD-A4ABD532F2F1@gmail.com> Message-ID: <478BD42D.9000205@list.mightyreason.com> Sterling Clover wrote: > HStringTemplate is a port of Terrence Parr?s lovely StringTemplate > (http://www.stringtemplate.org) engine to Haskell. Reading Terrence Parr describe StringTemplate, at http://www.stringtemplate.org/about.html is amusing: > The fact that StringTemplate does not allow such things as assignments (no > side-effects) should make you suspicious of engines that do allow it. and > Another distinctive StringTemplate language feature lacking in other engines is > lazy-evaluation. StringTemplate's attributes are lazily evaluated in the sense > that referencing attribute "a" does not actually invoke the data lookup > mechanism until the template is asked to render itself to text. Lazy evaluation > is surprising useful in both the web and code generation worlds because such > order decoupling allows code to set attributes when it is convenient or > efficient not necessarily before a template that references those attributes is > create and > Just so you know, I've never been a big fan of functional languages and I > laughed really hard when I realized (while writing the academic paper) that I > had implemented a functional language. The nature of the problem simply dictated > a particular solution. We are generating sentences in an output language so we > should use something akin to a grammar. Output grammars are inconvenient so tool > builders created template engines. Restricted template engines that enforce the > universally-agreed-upon goal of strict model-view separation also look > remarkably like output grammars as I have shown. So, the very nature of the > language generation problem dictates the solution: a template engine that is > restricted to support a mutually-recursive set of templates with > side-effect-free and order-independent attribute references. -- Chris From janstranik at yahoo.de Mon Jan 14 19:02:43 2008 From: janstranik at yahoo.de (Jan Stranik) Date: Mon Jan 14 18:56:04 2008 Subject: [Haskell] Simulating client server communication with recursive monads Message-ID: <004601c85709$f4d74550$de85cff0$@de> Hello, I am trying to simulate a client server traffic using recursive lazy evaluation. I am trying to do that in a recursive writer monad. Following code is my attempt to simulate client server interaction and collect its transcript: {-# OPTIONS -fglasgow-exts #-} module Main where import Control.Monad.Writer.Lazy simulation:: Writer [String] () simulation = mdo a <- server cr cr <- client $ take 10 a return () server:: [Integer] -> Writer [String] [Integer] server (a:as) = do tell ["server " ++ show a] rs <- server as return ((a*2):rs) server [] = return [] client:: [Integer] -> Writer [String] [Integer] client as = do dc <- doClient as return (0:dc) where doClient (a:as) = do tell ["Client " ++ show a] as' <- doClient as return ((a+1):as') doClient [] = return [] main = return $ snd $ runWriter simulation The problem that I see is that the transcript collected contains first all output from the server, and then output from the client. Here is an example of output that I see: :["server 0","server 1","server 3","server 7","server 15","server 31","server 63","server 127","server 255","server 511","server 1023","Client 0","Client 2","Client 6","Client 14","Client 30","Client 62","Client 126","Client 254","Client 510","Client 1022"] I would like to collect the output like: :["client 0","server 0", "client 1",.] This would allow me to remove the ending condition in simulation (take 10), and instead rely fully on lazy evaluation to collect as many simulation steps as needed by my computation. I am still relatively new to the concepts of recursive monadic computations, so I would appreciate any suggestions from experts on this mailing list. Thank you Jan -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell/attachments/20080114/4ff454e6/attachment-0001.htm From jpvogel1 at gmail.com Mon Jan 14 23:33:17 2008 From: jpvogel1 at gmail.com (John Vogel) Date: Mon Jan 14 23:26:36 2008 Subject: [Haskell] Simulating client server communication with recursive monads In-Reply-To: <004601c85709$f4d74550$de85cff0$@de> References: <004601c85709$f4d74550$de85cff0$@de> Message-ID: If you redefine as follows: server :: [Integer] -> Writer [String] [Integer] server [] = return [] server (a:as) = do tell ["Server " ++ show a] rs <- server as return (a:rs) You get this for the output: ["Server 0","Server 1","Server 2","Server 3","Server 4","Server 5","Server 6","Server 7","Server 8","Server 9","Server 1 0","Client 0","Client 1","Client 2","Client 3","Client 4","Client 5","Client 6","Client 7","Client 8","Client 9"] Then you just need to alternate the pattern. Though a real simulation of sever traffic would account for the packets not being recieved, rerequested, or recieved out of order. It also depends whether you are simulating TCP or UDP. On 1/14/08, Jan Stranik wrote: > > Hello, > > I am trying to simulate a client server traffic using recursive lazy > evaluation. I am trying to do that in a recursive writer monad. > > Following code is my attempt to simulate client server interaction and > collect its transcript: > > {-# OPTIONS -fglasgow-exts #-} > > module Main where > > > > import Control.Monad.Writer.Lazy > > simulation:: Writer [String] () > > simulation = mdo > > a <- server cr > > cr <- client $ take 10 a > > return () > > > > server:: [Integer] -> Writer [String] [Integer] > > server (a:as) = do > > tell ["server " ++ show a] > > rs <- server as > > return ((a*2):rs) > > > > server [] = return [] > > > > client:: [Integer] -> Writer [String] [Integer] > > client as = do > > dc <- doClient as > > return (0:dc) > > where > > doClient (a:as) = do > > tell ["Client " ++ show a] > > as' <- doClient as > > return ((a+1):as') > > doClient [] = return [] > > > > main = return $ snd $ runWriter simulation > > > > The problem that I see is that the transcript collected contains first all > output from the server, and then output from the client. > > Here is an example of output that I see: > > :["server 0","server 1","server 3","server 7","server 15","server > 31","server 63","server 127","server 255","server 511","server 1023","Client > 0","Client 2","Client 6","Client 14","Client 30","Client 62","Client > 126","Client 254","Client 510","Client 1022"] > > > > I would like to collect the output like: > > :["client 0","server 0", "client 1",?] > > > > This would allow me to remove the ending condition in simulation (take > 10), and instead rely fully on lazy evaluation to collect as many simulation > steps as needed by my computation. > > I am still relatively new to the concepts of recursive monadic > computations, so I would appreciate any suggestions from experts on this > mailing list. > > > > Thank you > > > > Jan > > > > _______________________________________________ > Haskell mailing list > Haskell@haskell.org > http://www.haskell.org/mailman/listinfo/haskell > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell/attachments/20080114/84277dd1/attachment.htm From conal at conal.net Tue Jan 15 00:45:48 2008 From: conal at conal.net (Conal Elliott) Date: Tue Jan 15 00:39:07 2008 Subject: [Haskell] extending GeSHi's haskell.php ? Message-ID: The haskell.php module in GeSHi (Generic Syntax Highlighter) knows how to make Haddock doc links for several value & type identifiers in the Prelude. I'd like it to know a lot more than that, at least including the "base" package. It looks pretty simple, though tedious, to add more, and so begs for automation, perhaps as an adjunct to Haddock or Hoogle, and maybe tied in with Hackage. Is anyone already working on such a thing? Any ideas? - Conal -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell/attachments/20080114/538b704c/attachment.htm From gvidal at dsic.upv.es Tue Jan 15 03:55:21 2008 From: gvidal at dsic.upv.es (German Vidal) Date: Tue Jan 15 03:48:42 2008 Subject: [Haskell] DEADLINE EXTENSION - SAS 2008 Message-ID: 15th International Static Analysis Symposium - SAS 2008 Valencia, Spain - July 16-18 >>DEDLINE EXTENSION<< New important dates: Submission of abstract: January 19, 2008 (changed) Submission of full paper: January 26, 2008 (changed) Notification: March 7, 2008 Camera-ready version: April 5, 2008 Conference: July 16-18, 2008 Please see: http://www.dsic.upv.es/~sas2008/ Maria Alpuente, German Vidal (PC co-chairs) Email: sas2008@dsic.upv.es From Clemens.Kupke at cwi.nl Tue Jan 15 11:45:40 2008 From: Clemens.Kupke at cwi.nl (Clemens Kupke) Date: Tue Jan 15 12:05:13 2008 Subject: [Haskell] CMCS 2008: Extended deadline Message-ID: <478CE334.8050306@cwi.nl> [- Apologies for multiple copies -] DEADLINE EXTENSION: New deadline for submissions of regular papers on **Monday, January 21** CMCS 2008 9th International Workshop on Coalgebraic Methods in Computer Science http://www.cwi.nl/projects/cmcs08/ Budapest, Hungary April 4-6, 2008 Key Note Speaker: Dexter Kozen (to be confirmed) Invited Speakers: Stefan Milius and Dirk Pattinson Important Dates Extended deadline for submission of regular papers: January 21, 2008 Notification of acceptance of regular papers: February 11, 2008. Final version for the preliminary proceedings: February 18, 2008. Deadline for submission of short contributions: March 10, 2008. Notification of acceptance of short contributions: March 17, 2008. The workshop will be held in conjunction with the 11th European Joint Conferences on Theory and Practice of Software ETAPS 2008 March 29 - April 6, 2008 Programme Committee Jiri Adamek (chair, Braunschweig), Corina Cirstea (Southampton), Neil Ghani (Nottingham), H. Peter Gumm (Marburg), Bart Jacobs (Nijmegen), Clemens Kupke (co-chair, Amsterdam), Alexander Kurz (Leicester), Ugo Montanari (Pisa), Larry Moss (Indiana), John Power (Bath), Jan Rutten (Amsterdam), Lutz Schr?der (Bremen), Tarmo Uustalu (Tallinn), Yde Venema (Amsterdam), Hiroshi Watanabe (Osaka). Submissions Two sorts of submissions will be possible this year: Papers to be evaluated by the programme committee for inclusion in the ENTCS proceedings: These papers must be written using ENTCS style files and be of length no greater than 20 pages. They must contain original contributions, be clearly written, and include appropriate reference to and comparison with related work. If a submission describes software, software tools, or their use, it should include all source code that is needed to reproduce the results but is not publicly available. If the additional material exceeds 5 MB, URL's of publicly available sites should be provided in the paper. Short contributions: These will not be published but will be compiled into a technical report of the Technical University of Braunschweig. They should be no more than two pages and may describe work in progress, summarise work submitted to a conference or workshop elsewhere, or in some other way appeal to the CMCS audience. Both sorts of submission should be submitted in postscript or pdf form as attachments to an email to cmcs08@cwi.nl. The email should include the title, corresponding author, and, for the first kind of submission, a text-only one-page abstract. After the workshop, we expect to produce a journal proceedings of extended versions of selected papers to appear in Theoretical Computer Science. For more information, please write to cmcs08@cwi.nl From janstranik at yahoo.de Tue Jan 15 13:19:07 2008 From: janstranik at yahoo.de (Jan Stranik) Date: Tue Jan 15 13:12:28 2008 Subject: [Haskell] Simulating client server communication with recursive monads In-Reply-To: References: <004601c85709$f4d74550$de85cff0$@de> Message-ID: <005401c857a3$1f32d550$5d987ff0$@de> John, Your change makes just the server function to return the same number that it receives. My server implementation multiplied the incoming number by two. My question was why does the output from writer shows first all output from server, then followed by all output from client. I would like to see output from client and server to alternate in the order in which the computation occurs, namely [server, client, server, client, server, client, .]. I know that for finite sequences, it is easily possible to reorder the output from writer. However, it is not possible to reorder the output if the sequence is infinite. That can be seen in my example program if it is modified by removing the statement "take 10". In that case the program never prints output from clients, the output printer will be only from the server. Jan From: John Vogel [mailto:jpvogel1@gmail.com] Sent: Monday, January 14, 2008 8:33 PM To: Jan Stranik Cc: haskell@haskell.org Subject: Re: [Haskell] Simulating client server communication with recursive monads If you redefine as follows: server :: [Integer] -> Writer [String] [Integer] server [] = return [] server (a:as) = do tell ["Server " ++ show a] rs <- server as return (a:rs) You get this for the output: ["Server 0","Server 1","Server 2","Server 3","Server 4","Server 5","Server 6","Server 7","Server 8","Server 9","Server 1 0","Client 0","Client 1","Client 2","Client 3","Client 4","Client 5","Client 6","Client 7","Client 8","Client 9"] Then you just need to alternate the pattern. Though a real simulation of sever traffic would account for the packets not being recieved, rerequested, or recieved out of order. It also depends whether you are simulating TCP or UDP. On 1/14/08, Jan Stranik wrote: Hello, I am trying to simulate a client server traffic using recursive lazy evaluation. I am trying to do that in a recursive writer monad. Following code is my attempt to simulate client server interaction and collect its transcript: {-# OPTIONS -fglasgow-exts #-} module Main where import Control.Monad.Writer.Lazy simulation:: Writer [String] () simulation = mdo a <- server cr cr <- client $ take 10 a return () server:: [Integer] -> Writer [String] [Integer] server (a:as) = do tell ["server " ++ show a] rs <- server as return ((a*2):rs) server [] = return [] client:: [Integer] -> Writer [String] [Integer] client as = do dc <- doClient as return (0:dc) where doClient (a:as) = do tell ["Client " ++ show a] as' <- doClient as return ((a+1):as') doClient [] = return [] main = return $ snd $ runWriter simulation The problem that I see is that the transcript collected contains first all output from the server, and then output from the client. Here is an example of output that I see: :["server 0","server 1","server 3","server 7","server 15","server 31","server 63","server 127","server 255","server 511","server 1023","Client 0","Client 2","Client 6","Client 14","Client 30","Client 62","Client 126","Client 254","Client 510","Client 1022"] I would like to collect the output like: :["client 0","server 0", "client 1",.] This would allow me to remove the ending condition in simulation (take 10), and instead rely fully on lazy evaluation to collect as many simulation steps as needed by my computation. I am still relatively new to the concepts of recursive monadic computations, so I would appreciate any suggestions from experts on this mailing list. Thank you Jan _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell/attachments/20080115/92e45919/attachment-0001.htm From haskell at list.mightyreason.com Tue Jan 15 14:06:48 2008 From: haskell at list.mightyreason.com (Chris Kuklewicz) Date: Tue Jan 15 14:00:11 2008 Subject: [Haskell] Simulating client server communication with recursive monads In-Reply-To: <005401c857a3$1f32d550$5d987ff0$@de> References: <004601c85709$f4d74550$de85cff0$@de> <005401c857a3$1f32d550$5d987ff0$@de> Message-ID: <478D0448.2050907@list.mightyreason.com> Jan Stranik wrote: > My question was why does the output from writer shows first all output > from server, then followed by all output from client. The effect of "mfix" is that the side-effects of the calculation still occur in the lexical order. Since server is before client, the output of the server precedes the client. > I would like to > see output from client and server to alternate in the order in which the > computation occurs, namely [server, client, server, client, server, > client, ?]. Then you have to restructure the code slightly. This works: > import Control.Monad > > import Control.Monad.Writer.Lazy > > client:: [Integer] -> Writer [String] [Integer] > client as = do > dc <- doClient as > return (0:dc) > where > doClient (a:as) = do > tell ["Client " ++ show a] > as' <- doClient as > return ((a+1):as') > doClient [] = return [] > > server :: [Integer] -> Writer [String] [Integer] > server [] = return [] > server (a:as) = do > tell ["Server " ++ show a] > rs <- server as > return (2*a:rs) > > simulation :: [(String,String)] > simulation = > let (clientOut,clientLog) = runWriter (client serverOut) > (serverOut,serverLog) = runWriter (server clientOut) > in zip serverLog clientLog > > main = print (take 10 simulation) From twd2 at dockerz.net Tue Jan 15 16:41:05 2008 From: twd2 at dockerz.net (Tim Docker) Date: Tue Jan 15 16:34:25 2008 Subject: [Haskell] hbeat: a rhythm sequencer Message-ID: <9F2C2FCC-912A-4C9B-8B24-A6C2C4BC4FC8@dockerz.net> I've just uploaded to hackage a step-based music sequencer, called "hbeat". It's little more than a toy, but it's fun. It ought to be cross platform, though has been built and tested solely on linux. Given that it's only 400 or so lines, it may be a useful example for anyone wanting to combine OpenGL graphics, interaction, and sound via the SDL libraries. It's also interesting that more than half of the code is "pure" (ie outside the IO monad), despite the fact that this is a stateful app with real time interaction with the real world. Further details here: http://dockerz.net/software/hbeat.html Thanks to lemmih for the SDL bindings that made this possible. Tim From janstranik at yahoo.de Tue Jan 15 20:27:25 2008 From: janstranik at yahoo.de (Jan Stranik) Date: Tue Jan 15 20:20:43 2008 Subject: [Haskell] Simulating client server communication with recursive monads In-Reply-To: <478D0448.2050907@list.mightyreason.com> References: <004601c85709$f4d74550$de85cff0$@de> <005401c857a3$1f32d550$5d987ff0$@de> <478D0448.2050907@list.mightyreason.com> Message-ID: <006901c857de$f460cd00$dd226700$@de> Thanks Chris, I appreciate your quick answer. Do you know what is the theoretical foundation for having mfix process side-effects in the lexical order as opposed to execution order? Could you point me to some papers, if you know of any off top your head? Thanks a lot, Jan -----Original Message----- From: Chris Kuklewicz [mailto:haskell@list.mightyreason.com] Sent: Tuesday, January 15, 2008 11:07 AM To: Jan Stranik Cc: haskell Subject: Re: [Haskell] Simulating client server communication with recursive monads Jan Stranik wrote: > My question was why does the output from writer shows first all output > from server, then followed by all output from client. The effect of "mfix" is that the side-effects of the calculation still occur in the lexical order. Since server is before client, the output of the server precedes the client. > I would like to > see output from client and server to alternate in the order in which the > computation occurs, namely [server, client, server, client, server, > client, ?]. Then you have to restructure the code slightly. This works: > import Control.Monad > > import Control.Monad.Writer.Lazy > > client:: [Integer] -> Writer [String] [Integer] > client as = do > dc <- doClient as > return (0:dc) > where > doClient (a:as) = do > tell ["Client " ++ show a] > as' <- doClient as > return ((a+1):as') > doClient [] = return [] > > server :: [Integer] -> Writer [String] [Integer] > server [] = return [] > server (a:as) = do > tell ["Server " ++ show a] > rs <- server as > return (2*a:rs) > > simulation :: [(String,String)] > simulation = > let (clientOut,clientLog) = runWriter (client serverOut) > (serverOut,serverLog) = runWriter (server clientOut) > in zip serverLog clientLog > > main = print (take 10 simulation) From Bruno.Oliveira at comlab.ox.ac.uk Tue Jan 15 21:08:05 2008 From: Bruno.Oliveira at comlab.ox.ac.uk (Bruno Oliveira) Date: Tue Jan 15 21:01:22 2008 Subject: [Haskell] Should the following program be accepted by ghc? Message-ID: Hello, I have been playing with ghc6.8.1 and type families and the following program is accepted without any type-checking error: > data a :=: b where > Eq :: a :=: a > decomp :: f a :=: f b -> a :=: b > decomp Eq = Eq However, I find this odd because if you interpret "f" as a function and ":=:" as equality, then this is saying that if f a = f b then a = b but clearly this does not hold in general. For example: f 1 = 0 f 2 = 0 So, we have that "f 1 = f 2" but this does not imply that "1 = 2". Ofcourse, that before ghc6.8, we add no type-level functions so maybe it was ok to consider the program above. However, with open type functions the following program is problematic and crashes ghc in style: > type family K a > c :: K a :=: K b -> a :=: b > c Eq = Eq with the following error message: ghc-6.8.1: panic! (the 'impossible' happened) (GHC version 6.8.1 for i386-apple-darwin): Coercion.splitCoercionKindOf base:GHC.Prim.sym{(w) tc 34v} co_aoW{tv} [tv] main:Bug.K{tc rom} a{tv aoS} [sk] ~ main:Bug.K{tc rom} b{tv aoT} [sk] It seems to me that the "decomp" should be rejected in the first place? Maybe the fact that "decomp" is accepted is a bug in the compiler? Any comments? Cheers, Bruno Oliveira From ninegua at gmail.com Tue Jan 15 23:32:54 2008 From: ninegua at gmail.com (Paul L) Date: Tue Jan 15 23:26:18 2008 Subject: [Haskell] ANN: GLFW-0.3 released Message-ID: <856033f20801152032y64b9ecadka637a4bfa2433bd7@mail.gmail.com> GLFW is a Haskell module for GLFW OpenGL framework. It provides an alternative to GLUT for OpenGL based Haskell programs. The current 0.3 version is for download from hackageDB at: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/GLFW-0.3 Same as the previous 0.2 version it requires Cabal 1.2 or later for installation (which comes as default in GHC 6.8 or later). The installation is now conforming to the standard Cabal steps. New addition is the Haddock documentation for all interface functions. There is also a sample program to demonstrate its usage on the Haskell wiki site for GLFW: http://haskell.org/haskellwiki/GLFW Any feedbacks is welcome! I've only tested it on a limited number of platforms + GHC combinations, so if you have installation issue, please let me know. Thank you! -- Regards, Paul Liu Yale Haskell Group http://www.haskell.org/yale From sulzmann at comp.nus.edu.sg Wed Jan 16 00:02:43 2008 From: sulzmann at comp.nus.edu.sg (Martin Sulzmann) Date: Tue Jan 15 23:56:02 2008 Subject: [Haskell] Should the following program be accepted by ghc? In-Reply-To: References: Message-ID: <18317.36851.829351.363711@suna0.comp.nus.edu.sg> [Whoever replies next pl move discussion to haskell-cafe] Bruno Oliveira writes: > Hello, > > I have been playing with ghc6.8.1 and type families and the following > program is accepted without any type-checking error: > > > data a :=: b where > > Eq :: a :=: a > > > decomp :: f a :=: f b -> a :=: b > > decomp Eq = Eq > > However, I find this odd because if you interpret "f" as a function and > ":=:" as equality, then this is saying that > > if f a = f b then a = b > > but clearly this does not hold in general. For example: > > f 1 = 0 > f 2 = 0 > > So, we have that "f 1 = f 2" but this does not imply that "1 = 2". > > Ofcourse, that before ghc6.8, we add no type-level functions so maybe it > was ok to consider the program above. Correct. The decomposition law f a = f b ==> a = b applies only to ordinary type constructors (eg list [] etc). See the System FC paper for more details. There's a (silent) constraint imposed on the program > > decomp :: f a :=: f b -> a :=: b > > decomp Eq = Eq saying that f can only be instantiated with an ordinary type constructor. As far as I know, GHC obeys this restriction (Manuel, Simon and Tom who have implemented type families may be able to tell you more). > However, with open type functions > the following program is problematic and crashes ghc in style: > > > type family K a > > > c :: K a :=: K b -> a :=: b > > c Eq = Eq > > with the following error message: > > ghc-6.8.1: panic! (the 'impossible' happened) > (GHC version 6.8.1 for i386-apple-darwin): > Coercion.splitCoercionKindOf > base:GHC.Prim.sym{(w) tc 34v} co_aoW{tv} [tv] > main:Bug.K{tc rom} a{tv aoS} [sk] > ~ > main:Bug.K{tc rom} b{tv aoT} [sk] > > It seems to me that the "decomp" should be rejected in the first place? > Maybe the fact that "decomp" is accepted is a bug in the compiler? As said above, you are not allowed to instantiate f with a type family constructor. Therefore, decomp is fine. The above program text "crashes" becaue we canNOT deduce that K a = K b ==> a =b The decomposition law does NOT apply to type family constructors. Indeed, ghc shouldn't crash here and instead provide a more helpful error message. Martin > Any comments? > > Cheers, > > Bruno Oliveira > _______________________________________________ > Haskell mailing list > Haskell@haskell.org > http://www.haskell.org/mailman/listinfo/haskell From stefanor at cox.net Wed Jan 16 00:55:39 2008 From: stefanor at cox.net (Stefan O'Rear) Date: Wed Jan 16 00:48:55 2008 Subject: [Haskell] Should the following program be accepted by ghc? In-Reply-To: <18317.36851.829351.363711@suna0.comp.nus.edu.sg> References: <18317.36851.829351.363711@suna0.comp.nus.edu.sg> Message-ID: <20080116055539.GA4870@localhost.localdomain> On Wed, Jan 16, 2008 at 01:02:43PM +0800, Martin Sulzmann wrote: > Bruno Oliveira writes: > > I have been playing with ghc6.8.1 and type families and the following > > program is accepted without any type-checking error: > > > > > data a :=: b where > > > Eq :: a :=: a ... > > Ofcourse, that before ghc6.8, we add no type-level functions so maybe it > > was ok to consider the program above. ... > > > type family K a Type families are unsupported, and their intersection with GADTs are unimplemented. Don't expect any program which uses both to do anything sane until 6.10. Stefan -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: Digital signature Url : http://www.haskell.org/pipermail/haskell/attachments/20080115/ea9986c4/attachment.bin From dons at galois.com Wed Jan 16 01:30:41 2008 From: dons at galois.com (Don Stewart) Date: Wed Jan 16 01:23:59 2008 Subject: [Haskell] Should the following program be accepted by ghc? In-Reply-To: <20080116055539.GA4870@localhost.localdomain> References: <18317.36851.829351.363711@suna0.comp.nus.edu.sg> <20080116055539.GA4870@localhost.localdomain> Message-ID: <20080116063041.GA31112@scytale.galois.com> stefanor: > On Wed, Jan 16, 2008 at 01:02:43PM +0800, Martin Sulzmann wrote: > > Bruno Oliveira writes: > > > I have been playing with ghc6.8.1 and type families and the following > > > program is accepted without any type-checking error: > > > > > > > data a :=: b where > > > > Eq :: a :=: a > ... > > > Ofcourse, that before ghc6.8, we add no type-level functions so maybe it > > > was ok to consider the program above. > ... > > > > type family K a > > Type families are unsupported, and their intersection with GADTs are > unimplemented. Don't expect any program which uses both to do anything > sane until 6.10. That being said, bug reports against the head version of GHC *are* welcome. But they're not an official feature of ghc 6.8, as Stefan hinted. -- Don From simonpj at microsoft.com Wed Jan 16 03:56:10 2008 From: simonpj at microsoft.com (Simon Peyton-Jones) Date: Wed Jan 16 03:49:25 2008 Subject: [Haskell] Should the following program be accepted by ghc? In-Reply-To: References: Message-ID: <638ABD0A29C8884A91BC5FB5C349B1C315A53A4EBB@EA-EXMSG-C334.europe.corp.microsoft.com> | I have been playing with ghc6.8.1 and type families and the following | program is accepted without any type-checking error: Martin's comments are spot on. FWIW, in the HEAD -- as Stefan says, type families are not *supposed* to work in 6.8.1 -- your program gives TF.hs:9:7: Couldn't match expected type `a' against inferred type `b' `a' is a rigid type variable bound by the type signature for `c' at TF.hs:8:7 `b' is a rigid type variable bound by the type signature for `c' at TF.hs:8:15 Expected type: a :=: b Inferred type: b :=: b In the expression: Eq In the definition of `c': c Eq = Eq That's fair enough. If you change K to be a 'data family', then decomposition works, and the program compiles. Bugs in type families against the HEAD are, as Don says, highly welcome. Simon From jno at di.uminho.pt Wed Jan 16 04:18:38 2008 From: jno at di.uminho.pt (J.N. Oliveira) Date: Wed Jan 16 04:12:11 2008 Subject: [Haskell] Should the following program be accepted by ghc? In-Reply-To: References: Message-ID: <73EE7356-46E4-46E7-A0A2-7A030C6A478D@di.uminho.pt> On Jan 16, 2008, at 2:08 AM, Bruno Oliveira wrote: > Hello, > > I have been playing with ghc6.8.1 and type families and the > following program is accepted without any type-checking error: > >> data a :=: b where >> Eq :: a :=: a > >> decomp :: f a :=: f b -> a :=: b >> decomp Eq = Eq > > However, I find this odd because if you interpret "f" as a function > and ":=:" as equality, then this is saying that > > if f a = f b then a = b This is saying that f is injective. So perhaps the standard interpretation leads implicitly to this class of functions. Cheers jno -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 3082 bytes Desc: not available Url : http://www.haskell.org/pipermail/haskell/attachments/20080116/530dccc8/smime-0001.bin From bit at mutantlemon.com Wed Jan 16 12:03:27 2008 From: bit at mutantlemon.com (Bit Connor) Date: Wed Jan 16 11:56:43 2008 Subject: [Haskell] Re: [Haskell-cafe] ANNOUNCE: HStringTemplate -- An Elegant, Functional, Nifty Templating Engine for Haskell In-Reply-To: <89B71013-9550-4E1F-91DD-A4ABD532F2F1@gmail.com> References: <89B71013-9550-4E1F-91DD-A4ABD532F2F1@gmail.com> Message-ID: <6205bd290801160903p4aa56a6em1c54d473dd9be883@mail.gmail.com> On Jan 14, 2008 9:47 AM, Sterling Clover wrote: > HStringTemplate is a port of Terrence Parr's lovely StringTemplate > (http://www.stringtemplate.org) engine to Haskell. > > It is available, cabalized, at: > darcs get http://code.haskell.org/HStringTemplate/ Template systems have been a crucial missing part of Haskell web development. I am very happy to hear about this project, and will definitely be looking at this in the near future! Thanks, Bit From derek.a.elkins at gmail.com Wed Jan 16 11:40:46 2008 From: derek.a.elkins at gmail.com (Derek Elkins) Date: Wed Jan 16 12:34:37 2008 Subject: [Haskell] Should the following program be accepted by ghc? In-Reply-To: <73EE7356-46E4-46E7-A0A2-7A030C6A478D@di.uminho.pt> References: <73EE7356-46E4-46E7-A0A2-7A030C6A478D@di.uminho.pt> Message-ID: <1200501646.5657.3.camel@derek-laptop> On Wed, 2008-01-16 at 09:18 +0000, J.N. Oliveira wrote: > On Jan 16, 2008, at 2:08 AM, Bruno Oliveira wrote: > > > Hello, > > > > I have been playing with ghc6.8.1 and type families and the > > following program is accepted without any type-checking error: > > > >> data a :=: b where > >> Eq :: a :=: a > > > >> decomp :: f a :=: f b -> a :=: b > >> decomp Eq = Eq > > > > However, I find this odd because if you interpret "f" as a function > > and ":=:" as equality, then this is saying that > > > > if f a = f b then a = b > > This is saying that f is injective. So perhaps the standard > interpretation leads implicitly to this class of functions. Just like data constructors, type constructors are injective. f a doesn't simplify and so essentially you have structural equality of the type terms thus f a = f b is -equivalent- to a = b. Obviously type functions change this, just like normal value functions do at the value level. From jgoerzen at complete.org Wed Jan 16 13:25:21 2008 From: jgoerzen at complete.org (John Goerzen) Date: Wed Jan 16 13:18:34 2008 Subject: [Haskell] ANN: 16 updated packages: HDBC, ConfigFile, MissingH, and more Message-ID: <20080116182521.GA26886@hustlerturf.com> Hi folks, I've made new releases of a number of my packages. Rather than flood the list with individual announcements, I've consolidated them here. Many of these packages have only GHC 6.8 compatibility updates, but a fair number also have more significant changes. Detailed changes lists are below. These packages have been updated: anydbm ConfigFile darcs-buildpackage dfsbuild HDBC HDBC-odbc HDBC-postgresql HDBC-sqlite3 hg-buildpackage HSH hslogger LDAP ListLike magic MissingH srcinst These have not yet been updated: arch2darcs (no longer maintained) gtkrsync (pending newer GTK upload in Debian) hpodder (pending newer haxml upload in Debian) missingpy (pending available time) All packages have been uploaded to: * Hackage * Debian sid * Their software.complete.org site, if any * Their darcs or Mercurial repository anydbm 1.0.5 ------------ A generic interface library for DBM-like databases Update for GHC 6.8.x. Homepage: http://software.complete.org/anydbm ConfigFile 1.0.4 ---------------- Library for reading/writing human-editable configuration files Updated for GHC 6.8 compatibility and the new MissingH Homepage: http://software.complete.org/configfile darcs-buildpackage 0.5.12 ------------------------- Tools for building Debian packages with source stored in Darcs Updated for GHC 6.8 compatibility and the new MissingH Homepages: Darcs repo: http://darcs.complete.org/darcs-buildpackage Debian: http://packages.qa.debian.org/darcs-buildpackage dfsbuild 1.0.2 -------------- Tool for building Debian From Scratch bootable ISO images * Update for GHC 6.8.x Homepage: http://people.debian.org/~jgoerzen/dfs HDBC 1.1.4 ---------- Haskell DataBase Connectivity, generic RDBMS access * Update cabal for GHC 6.8 thanks to Paulo Tanimoto Homepage: http://software.complete.org/hdbc HDBC-odbc 1.1.4.0 ----------------- HDBC driver for ODBC connectivity * Updates for GHC 6.8 thanks to Bjorn Bringert and John Goerzen Homepage: http://software.complete.org/hdbc-odbc HDBC-postgresql 1.1.4.0 ----------------------- HDBC driver for PostgreSQL * Make sure Hackage tarball gets all files in package * Update for GHC 6.8 thanks to Duncan Coutts * Now use pg_config to find PostgreSQL library locations automatically thanks to Duncan Coutts Homepage: http://software.complete.org/hdbc-postgresql HDBC-sqlite3 1.1.4.0 -------------------- HDBC driver for Sqlite v3 * Cabal updates for GHC 6.8 thanks to Duncan Coutts and Paulo Tanimoto * Allow statements to remain prepared after execution has finished thanks to Toby Allsopp Homepage: http://software.complete.org/hdbc-sqlite3 hg-buildpackage 1.0.4 --------------------- Tools for building Debian packages with source in Mercurial Updates for compatibility with GHC 6.8, newest MissingH and HSH Homepages: Mercurial repo: http://hg.complete.org/hg-buildpackage Hackage: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hg-buildpackage-1.0.4 Debian: http://packages.debian.org/hg-buildpackage [ no trac instance ] HSH 1.2.5 --------- Library for easy shell-like scripting in Haskell * Clean ups and doc updates [jgoerzen] * Update for newer MissingH [jgoerzen] * Update .cabal for GHC 6.8 thanks to gwern0 * Various cleanups and reorgs thanks to gwern0 * New wcW (wc word count) in ShellEquivs thanks to gwern0 Homepage: http://software.complete.org/hsh hslogger 1.0.4 -------------- Library providing logging infrastructure * Updated for GHC 6.8 compatibility * Removed Setup.hs hooks in favor of Cabal configurations * Thanks to patches from Shae Erisson and Spencer Janssen contributing to the GHC 6.8 compatibility. Homepage: http://software.complete.org/hslogger LDAP 0.6.3 ---------- Haskell bindings for LDAP * GHC 6.8.x compatibility fixes * Updated homepage in .cabal file Homepage: http://software.complete.org/ldap-haskell ListLike 1.0.1 -------------- Library providing generic operations over list-like types * GHC 6.8.x compatibility fixes to .cabal file Homepage: http://software.complete.org/listlike magic 1.0.7 ----------- Binding for Magic, the file type identification library * Updates for GHC 6.8 compatibility Homepages: Hackage: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/magic-1.0.7 Darcs tree: http://darcs.complete.org/magic-haskell MissingH 1.0.0 -------------- Library of many useful functions * Poof, this is 1.0! * GHC 6.8 compatibility fixes: + GHC 6.8 introduced Data.String. Renamed the MissingH Data.String to Data.String.Utils + doc string tweaks for new haddock + cabal and build system updates thanks to Duncan Coutts * -Wall compatibility improvements throughout. Patches from gwern0 * Data.List.Utils.uniq efficiency improved thanks to Martin Huschenbett * New Data.Tuple.Utils from Neil Mitchell Homepage: http://software.complete.org/missingh srcinst 0.8.10 -------------- Tool to install Debian packages using only source, Gentoo-style * Updated for GHC 6.8.x and new MissingH From Bruno.Oliveira at comlab.ox.ac.uk Wed Jan 16 20:59:12 2008 From: Bruno.Oliveira at comlab.ox.ac.uk (Bruno Oliveira) Date: Wed Jan 16 20:52:24 2008 Subject: [Haskell] Should the following program be accepted by ghc? In-Reply-To: <1200501646.5657.3.camel@derek-laptop> References: <73EE7356-46E4-46E7-A0A2-7A030C6A478D@di.uminho.pt> <1200501646.5657.3.camel@derek-laptop> Message-ID: Hello, Maybe a more slightly more honest type for "decomp" would be:) : decomp :: Injective f => f a :=: f b -> a :=: b Cheers, Bruno On Wed, 16 Jan 2008, Derek Elkins wrote: > On Wed, 2008-01-16 at 09:18 +0000, J.N. Oliveira wrote: >> On Jan 16, 2008, at 2:08 AM, Bruno Oliveira wrote: >> >>> Hello, >>> >>> I have been playing with ghc6.8.1 and type families and the >>> following program is accepted without any type-checking error: >>> >>>> data a :=: b where >>>> Eq :: a :=: a >>> >>>> decomp :: f a :=: f b -> a :=: b >>>> decomp Eq = Eq >>> >>> However, I find this odd because if you interpret "f" as a function >>> and ":=:" as equality, then this is saying that >>> >>> if f a = f b then a = b >> >> This is saying that f is injective. So perhaps the standard >> interpretation leads implicitly to this class of functions. > > Just like data constructors, type constructors are injective. f a > doesn't simplify and so essentially you have structural equality of the > type terms thus f a = f b is -equivalent- to a = b. Obviously type > functions change this, just like normal value functions do at the value > level. > > From jonathanccast at fastmail.fm Wed Jan 16 22:35:49 2008 From: jonathanccast at fastmail.fm (Jonathan Cast) Date: Wed Jan 16 22:29:02 2008 Subject: [Haskell] Should the following program be accepted by ghc? In-Reply-To: References: <73EE7356-46E4-46E7-A0A2-7A030C6A478D@di.uminho.pt> <1200501646.5657.3.camel@derek-laptop> Message-ID: <34184B6F-AE92-4A5D-8AB4-6D113483544D@fastmail.fm> On 16 Jan 2008, at 5:59 PM, Bruno Oliveira wrote: > Hello, > > Maybe a more slightly more honest type for "decomp" would be:) : > > decomp :: Injective f => f a :=: f b -> a :=: b Perhaps. Although you *have* to have an implicit Injective constraint on all type constructor variables to pull of Haskell's first-order unification trick, so it's not a constraint that will be relaxed soon (or, most likely, ever). jcc From grelck at isp.uni-luebeck.de Thu Jan 17 03:19:21 2008 From: grelck at isp.uni-luebeck.de (Clemens Grelck) Date: Thu Jan 17 03:12:39 2008 Subject: [Haskell] PAPP 2008 - Deadline Extension Message-ID: <478F0F89.7040907@isp.uni-luebeck.de> *** DEADLINE EXTENSION *** Papers now due: January 20, 2008 ===================================================== PAPP 2008 Fifth International Workshop on aPpplications of declArative and object-oriented Parallel Programming part of The International Conference on Computational Science June 23-25, 2008, Krakow, Poland http://f.loulergue.free.fr/PAPP2008 ===================================================== AIMS AND SCOPE Computational Science applications are more and more complex to develop and require more and more computing power. Parallel and grid computing are solutions to the increasing need for computing power. High level languages offer a high degree of abstraction which ease the development of complex systems. Moreover, being based on formal semantics, it is possible to certify the correctness of critical parts of the applications. Algorithmic skeletons, parallel extensions of functional languages such as Haskell and ML, parallel logic and constraint programming, parallel execution of declarative programs such as SQL queries, genericity and meta-programming in object-oriented languages, etc. have produced methods and tools that improve the price/performance ratio of parallel software, and broaden the range of target applications. The PAPP workshop focuses on practical aspects of high-level parallel programming: design, implementation and optimization of high-level programming languages, libraries, middlewares and tools (performance predictors working on high-level parallel/grid source code, visualisations of abstract behaviour, automatic hotspot detectors, high-level GRID resource managers, compilers, automatic generators, etc.), applications in all fields of computational science, benchmarks and experiments. Research on high-level grid programming is particularly relevant as well as domain specific parallel software. The aim of all these languages and tools is to improve and ease the development of applications. Thus the Fifth PAPP workshop focuses on applications. The PAPP workshop is aimed both at researchers involved in the development of high level approaches for parallel and grid computing and computational science researchers who are potential users of these languages and tools. Topics We welcome submission of original, unpublished papers in English on topics including: * applications in all fields of high-performance computing and visualisation (using high-level tools) * high-level models (CGM, BSP, MPM, LogP, etc.) and tools for parallel and grid computing * high-level parallel language design, implementation and optimisation * modular, object-oriented, functional, logic, constraint programming for parallel, distributed and grid computing systems * algorithmic skeletons, patterns and high-level parallel libraries * generative (e.g. template-based) programming with algorithmic skeletons, patterns and high-level parallel libraries * benchmarks and experiments using such languages and tools All the contributions should illustrate the proposed techniques on a significant application. PAPER SUBMISSION AND PUBLICATION Prospective authors are invited to submit full papers in English presenting original research. Submitted papers must be unpublished and not submitted for publication elsewhere. Papers will go through a rigorous reviewing process. Each paper will be reviewed by at least three referees. The accepted papers will be published in the Springer-Verlag Lecture Notes in Computer Science (LNCS) series, as part of the ICCS proceedings. Submission must be done through the ICCS website: http://www.iccs-meeting.org/iccs2008/papers/upload.php. We invite you to submit a full paper of 8 pages formatted according to the rules of LNCS, describing new and original results, no later than January 20, 2008. Submission implies the willingness of at least one of the authors to register and present the paper. An early email to papp at free.fr with your intention to submit a paper would be greatly appreciated (especially if you have doubts about the relevance of your paper). Accepted papers Accepted papers should be presented at the workshop. Authors will be invited to submit extended and revised versions of their papers. Accepted manuscripts will be published in a special issue of Scalable Computing: Practice and Experience. Important Dates * January 20, 2008 - Full paper due * March 1, 2008 - Notification * March 15, 2008 - Camera-ready paper due * September 15, 2008 - Journal version due PROGRAMME COMMITTEE * Marco Aldinucci (University of Pisa, Italy) * Anne Benoit (ENS Lyon, France) * Umit V Catalyurek (The Ohio State University, USA) * Manuel Chakravarty (University of New South Wales, Australia) * Fr?d?ric Gava (University Paris XII Val de Marne, France) * Alexandros Gerbessiotis (NJIT, USA) * Clemens Grelck (University of Luebeck, Germany) * Iwasaki Hideya (The University of Electro-communications, Japan) * Paul H J Kelly (Imperial College London, UK) * Christoph Kessler (Link?pings Universitet, Sweden) * Rita Loogen (University of Marburg, Germany) * Fr?d?ric Loulergue (The University of Orl?ans, France) * Kiminori Matsuzaki (The University of Tokyo, Japan) * Samuel Midkiff (Purdue University, USA) * Susanna Pelagatti (University of Pisa, Italy) * Bruno Raffin (INRIA, France) * Casiano Rodriguez Leon (University La Laguna, Spain) ORGANIZERS * Dr. Anne BENOIT Laboratoire d'Informatique du Parallelisme Ecole Normale Sup?rieure de Lyon 46 All?e d'Italie 69364 Lyon Cedex 07 - France * Pr. Frederic LOULERGUE Laboratoire d'Informatique Fondamentale d'Orl?ans Universit? d'Orl?ans Batiment IIIA - Rue L?onard de Vinci - BP6759 45067 Orl?ans Cedex 2 - France From s.clover at gmail.com Fri Jan 18 00:55:24 2008 From: s.clover at gmail.com (Sterling Clover) Date: Fri Jan 18 00:55:30 2008 Subject: [Haskell] Re: [Haskell-cafe] ANNOUNCE: HStringTemplate -- An Elegant, Functional, Nifty Templating Engine for Haskell In-Reply-To: References: <89B71013-9550-4E1F-91DD-A4ABD532F2F1@gmail.com> Message-ID: <920EA66C-EAE7-45E1-BE11-09441B262E69@gmail.com> Graham, I'm sort of playing fast and loose with referential transparency here, as I actually am with stringTemplateFileGroup as well. They both use unsafeIO to do what they want, and in corner cases could give silly, though not dangerous results (i.e., in the sense of being hazardous to your program, these calls are substantially less worrisome than head). stringTemplateFileGroup could conceivably be in IO, if it was strict in reading all the files in the directory it was passed, but cacheSTGroup would force every access to a group to take place in IO, which would make the library somewhat of a pain to work with. My semi-justification for this is that its referentially- transparent-enough for most use cases, in that just about the only thing one would be doing with a StringTemplate result would be outputting it again in some form anyway. In my experience, being able to "hot-edit" templates for a live app is a key benefit of a templating system, and forcing everything into IO to get that seems like an undue burden on end-users. On the other hand, I'm also open to implementing an IO API that's safe and renaming the current functions to something somewhat scarier, or moving both them and their IO equivs to distinct modules so that end users could choose which to import. A number of options seem reasonable here. --Sterl. (btw, I fixed the typo you emailed me about in the repo, and also made a few other changes I documented at http:// fmapfixreturn.wordpress.com/) On Jan 16, 2008, at 8:19 PM, Graham Fawcett wrote: > On Jan 14, 2008 2:47 AM, Sterling Clover wrote: >> HStringTemplate is a port of Terrence Parr's lovely StringTemplate >> (http://www.stringtemplate.org) engine to Haskell. > > This is very cool. > > Your docs describe a function, cacheSTGroup: > > cacheSTGroup :: Int -> STGen a -> STGen a > Given an integral amount of seconds and a group, returns a group > cached for that span of time. Does not cache "misses." > > How does this work without breaking referential transparency? > Shouldn't it be in the IO monad if it is time-dependent? > > Graham From simonpj at microsoft.com Fri Jan 18 18:07:03 2008 From: simonpj at microsoft.com (Simon Peyton-Jones) Date: Fri Jan 18 18:04:57 2008 Subject: [Haskell] Ancient, but still having fun Message-ID: <638ABD0A29C8884A91BC5FB5C349B1C315A55284CA@EA-EXMSG-C334.europe.corp.microsoft.com> Friends, It's Friday 18 January 2008, which makes it my 50th birthday. I spent part of the day happily polishing Geoff Mainland's patch that adds quasi-quoting to GHC, and committing it to the GHC HEAD. I'm happy to say that this is increasingly the story: more and more people are getting involved with making GHC into a better compiler. Better still, many more people are involved in making Haskell a successful and increasingly-influential language. I'm boggled by the sheer number of libraries that are announced these days in each issue of the Haskell Weekly (sic) News. And for the first time I'm getting invitations out of the blue to speak about Haskell at mainstream professional-developer conferences. Suddenly Haskell is cool. Ancient or not, I'm still having a terrific time in this community. When I first became addicted to functional programming, as a result of Arthur Norman's 4-lecture course, and David Turner's SK-combinator papers, I never dreamt of what a wild and fascinating ride it would turn out to be. Thank you all! Simon From naur at post11.tele.dk Sat Jan 19 05:31:55 2008 From: naur at post11.tele.dk (Thorkil Naur) Date: Sat Jan 19 05:33:14 2008 Subject: [Haskell] Ancient, but still having fun In-Reply-To: <20080118230515.EPCQ22041.fep22.mail.dk@www.haskell.org> References: <20080118230515.EPCQ22041.fep22.mail.dk@www.haskell.org> Message-ID: <200801191131.57105.naur@post11.tele.dk> Young Man, On Saturday 19 January 2008 00:07, Simon Peyton-Jones wrote: > Friends, > > It's Friday 18 January 2008, which makes it my 50th birthday. Congratulations! > ... > Ancient or not, I'm still having a terrific time in this community. When I first became addicted to functional programming, as a result of Arthur Norman's 4-lecture course, and David Turner's SK-combinator papers, I never dreamt of what a wild and fascinating ride it would turn out to be. > > Thank you all! > > Simon > ... Rest assured that there are many of us having a terrific time too. And not least because of your in many ways fabulous presence. Thank you Simon. Best regards Thorkil From icfp.publicity at googlemail.com Mon Jan 21 10:53:22 2008 From: icfp.publicity at googlemail.com (Matthew Fluet (ICFP Publicity Chair)) Date: Mon Jan 21 10:53:12 2008 Subject: [Haskell] ICFP2008 Call for Papers Message-ID: <53ff55480801210753i7753e6a9tc33bed3112b228a1@mail.gmail.com> Call for Papers ICFP 2008: International Conference on Functional Programming Victoria, BC, Canada, 22-24 September 2008 http://www.icfpconference.org/icfp2008 Submission deadline: 2 April 2008 ICFP 2008 seeks original papers on the art and science of functional programming. Submissions are invited on all topics from principles to practice, from foundations to features, from abstraction to application. The scope includes all languages that encourage functional programming, including both purely applicative and imperative languages, as well as languages with objects and concurrency. Particular topics of interest include * Applications and Domain-Specific Languages: systems programming; scientific and numerical computing; symbolic computing; artificial intelligence; databases; graphical user interfaces; multimedia programming; scripting; system administration; distributed-systems and web programming; XML processing; security * Foundations: formal semantics; lambda calculus; type theory; monads; continuations; control; state; effects * Design: algorithms and data structures; modules; type systems; concurrency and distribution; components and composition; relations to object-oriented or logic programming * Implementation: abstract machines; compile-time and run-time optimization; just-in-time compilers; memory management; parallel hardware; interfaces to foreign functions, services, components or low-level machine resources * Transformation and Analysis: abstract interpretation; partial evaluation; program transformation * Software-development Techniques: design patterns; specification; verification; validation; debugging; test generation; tracing; profiling * Functional Pearls: elegant, instructive, and fun essays on functional programming * Practice and Experience: novel results drawn from experience in education or industry. Experience Reports are also solicited, which are short papers (2-4 pages) that provide evidence that functional programming really works or describe obstacles that have kept it from working in a particular application. Functional Pearls and Experience Reports are separate categories of papers that need not report original research results and must be marked as such at the time of submission. Detailed guidelines on both categories are below. What's different this year? ~~~~~~~~~~~~~~~~~~~~~~~~~~~ * No double blind reviewing. Instructions for authors ~~~~~~~~~~~~~~~~~~~~~~~~ By Wednesday, 2 April 2008, 09:00 AM Apia time, submit an abstract of at most 300 words and a full paper of at most 12 pages (4 pages for an Experience Report), including bibliography and figures. The deadline will be strictly enforced and papers not meeting the page limits are summarily rejected. Authors have the option to attach supplementary material to a submission, on the understanding that reviewers are not expected to read it. A submission will be evaluated according to its relevance, correctness, significance, originality, and clarity. It should explain its contributions in both general and technical terms, clearly identifying what has been accomplished, explaining why it is significant, and comparing it with previous work. The technical content should be accessible to a broad audience. Each submission must adhere to SIGPLAN's republication policy, as explained on the web. Violation risks summary rejection of the offending submission. Proceedings will be published by ACM Press. Authors of accepted submissions are expected to transfer the copyright to ACM. They may have the option to have their presentation videotaped and published along with the conference proceedings in the ACM Digital Library. Video recordings will only be released at the consent of the presenter, which is expressed by signing an additional copyright release/permission form. Formatting ~~~~~~~~~~ Submissions must be in PDF format printable in black and white on US Letter sized paper and interpretable by Ghostscript. If this requirement is a hardship, make contact with the program chair at least one week before the deadline. ICFP proceedings are printed in black and white. It is permissible to include color in a submission, but you risk annoying reviewers who will have to decide if your final paper will be understandable without it. Papers must adhere to the standard ACM conference format: two columns, nine-point font on a ten-point baseline, with columns 20pc (3.33in) wide and 54pc (9in) tall, with a column gutter of 2pc (0.33in). A suitable document template for LaTeX is available from SIGPLAN. Submission ~~~~~~~~~~ Submissions will be accepted electronically; the submission page is not yet ready. The deadline is set at Samoan time, so if your submission is in by 09:00 AM Wednesday according to your local time, wherever you are, the submission will be on time. The world clock (http://www.timeanddate.com/worldclock/fixedtime.html?month=4&day=2&year=2008&hour=9&min=0&sec=0&p1=282) can give you the equivalent in your local time, e.g.,1:00 PM Wednesday in Seattle, 4:00 PM Wednesday in New York, and 9:00 PM Wednesday in London. Citation ~~~~~~~~ We recommend (but do not require) that you put your citations into author-date form. This procedure makes your paper easier to review. For example, if you cite a result on testing as ``(Claessen and Hughes 2000)'', many reviewers will recognize the result instantly. On the other hand, if you cite it as ``[4]'', even the best-informed reviewer has to page through your paper to find the reference. By using author-date form, you enable a knowledgeable reviewer to focus on content, not arbitrary numbering of references. LaTeX users can simply use the natbib package along with the plainnat bibliography style. Author response ~~~~~~~~~~~~~~~ You will have a 48-hour period, starting at 09:00 on 21 May 2008 Apia time, to read and respond to reviews. Special categories of papers ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In addition to research papers, ICFP solicits two kinds of papers that do not require original research contributions: Functional Pearls, which are full papers, and Experience Reports, which are limited to four pages. Authors submitting such papers may wish to consider the following advice. Functional Pearls ~~~~~~~~~~~~~~~~~ A Functional Pearl is an elegant essay about something related to functional programming. It might offer: * a new and thought-provoking way of looking at an old idea * an instructive example of program calculation or proof * a nifty presentation of an old or new data structure * an interesting application of functional programming techniques * a novel use or exposition of functional programming in the classroom Functional Pearls are not restricted to the above varieties, however. While pearls often demonstrate an idea through the development of a short program, there is no requirement or expectation that they do so. Thus, they encompass the notions of theoretical and educational pearls. A pearl should be concise, instructive, and entertaining. Your pearl is likely to be rejected if your readers get bored, if the material gets too complicated, if too much specialized knowledge is needed, or if the writing is inelegant. The key to writing a good pearl is polishing. Some advice from Richard Bird: * Throw away the rule book for writing research papers. * Get in quick; get out quick. * Be self-contained; don't go deep into related work, with lengthy references. * You are telling a story, so some element of surprise is welcome. * Above all, be engaging. * Give a talk on the pearl to non-specialists, your students, or your department. If you changed the order of presentation for the talk, consider using the new order in the next draft. * Put the pearl away for a while, then take it out and polish it again. Experience Reports ~~~~~~~~~~~~~~~~~~ ICFP has long solicited submissions on the practice and experience of functional programming. But reports of experience are inherently different from research papers, and when judged by the criteria of scientific merit, novelty, or research contribution, they have not competed well against traditional ICFP submissions. Yet we believe that the functional-programming community would benefit from being able to draw on and cite the experience of others. For this reason, we have introduced the ICFP Experience Report. Unlike a normal ICFP paper, the purpose of an Experience Report is not to add to the body of knowledge of the functional-programming community. Rather, the purpose of an Experience Report is to help create a body of published, refereed, citable evidence that functional programming really works---or to describe what obstacles prevent it from working. An Experience Report is distinguished from a normal ICFP paper by its title, by its length, and by the criteria used to evaluate it. * Both in the proceedings and in any citations, the title of each accepted Experience Report must begin with the words ``Experience Report'' followed by a colon. * An Experience Report is at most 4 pages long. Each accepted Experience Report will be presented at the conference, but depending on the number of Experience Reports and regular papers accepted, authors of Experience reports may be asked to give shorter talks. * Because the purpose of Experience Reports is to enable our community to accumulate a body of evidence about the efficacy of functional programming, an acceptable Experience Report need not present novel results or conclusions. It is sufficient if the Report states a clear thesis and provides supporting evidence. The thesis must be relevant to ICFP, but it need not be novel. The program committee will accept or reject Experience Reports based on whether they judge the evidence to be convincing. Anecdotal evidence will be acceptable provided it is well argued and the author explains what efforts were made to gather as much evidence as possible. Typically, more convincing evidence is obtained from papers which show how functional programming was used than from papers which only say that functional programming was used. The most convincing evidence often includes comparisons of situations before and after the introduction or discontinuation of functional programming. Evidence drawn from a single person's experience may be sufficient, but more weight will be given to evidence drawn from the experience of groups of people. Possible topics for an Experience Report include, but are not limited to * Insights gained from real-world projects using functional programming * Comparison of functional programming with conventional programming in the context of an industrial project or a university curriculum * Project-management, business, or legal issues encountered when using functional programming in a real-world project * Curricular issues encountered when using functional programming in education * Real-world constraints that created special challenges for an implementation of a functional language or for functional programming in general An Experience Report should be short and to the point: make a claim about how well functional programming worked on your project and why, and produce evidence to substantiate your claim. If functional programming worked for you in the same ways it has worked for others, you need only to summarize the results---the main part of your paper should discuss how well it worked and in what context. Most readers will not want to know all the details of your project and its implementation, but please characterize your project and its context well enough so that readers can judge to what degree your experience is relevant to their own projects. Be especially careful to highlight any unusual aspects of your project. Also keep in mind that specifics about your project are more valuable than generalities about functional programming; for example, it is more valuable to say that your team delivered its software a month ahead of schedule than it is to say that functional programming made your team more productive. If your paper not only describes experience but also presents new technical results, or if your experience refutes cherished beliefs of the functional-programming community, you may be better off submitting it as a full paper, which will be judged by the usual criteria of novelty, originality, and relevance. If you are unsure in which category to submit, the program chair will be happy to help you decide. Other information ~~~~~~~~~~~~~~~~~ Conference Chair ~~~~~~~~~~~~~~~~ James Hook (Portland State University) Program Chair ~~~~~~~~~~~~~ Peter Thiemann Albert-Ludwigs-Universit?t Georges-K?hler-Allee 079 79110 Freiburg, Germany Email: icfp08@informatik.uni-freiburg.de Phone: +49 761 203 8051 Fax: +49 761 203 8052 Mail sent to the address above is filtered for spam. If you send mail and do not receive a prompt response, particularly if the deadline is looming, feel free to telephone and reverse the charges. Program Committee ~~~~~~~~~~~~~~~~~ Derek Dreyer (Max Planck Institute for Software Systems) Robert Ennals (Intel Research) Kathleen Fisher (AT&T Research) Zhenjiang Hu (University of Tokyo) Frank Huch (University of Kiel) Andrew Kennedy (Microsoft Research) Kevin Millikin (Google) Henrik Nilsson (University of Nottingham) Chris Okasaki (United States Military Academy) Brigitte Pientka (McGill University) Rinus Plasmeijer (University of Nijmegen) Alan Schmitt (INRIA) Chung-chieh Shan (Rutgers) Mitchell Wand (Northeastern University) Stephen Weeks (Jane Street Capital) Important Dates (at 09:00 Apia time, UTC-11) ~~~~~~~~~~~~~~~ Submission: 2 April 2008 Author response: 21 May 2008 Notification: 16 June 2008 Final papers due: 7 July 2008 ICFP 2008 Web Site ~~~~~~~~~~~~~~~~~~ http://www.icfpconference.org/icfp2008/ Special Journal Issue ~~~~~~~~~~~~~~~~~~~~~ There will be a special journal issue with papers from ICFP 2008. The program committee will invite the authors of select accepted papers to submit a journal version to this issue. From simonpj at microsoft.com Wed Jan 23 08:29:55 2008 From: simonpj at microsoft.com (Simon Peyton-Jones) Date: Wed Jan 23 08:29:57 2008 Subject: [Haskell] Why functional programming matters Message-ID: <638ABD0A29C8884A91BC5FB5C349B1C316EC739C29@EA-EXMSG-C334.europe.corp.microsoft.com> Friends Over the next few months I'm giving two or three talks to groups of *non* functional programmers about why functional programming is interesting and important. If you like, it's the same general goal as John Hughes's famous paper "Why functional programming matters". Audience: some are technical managers, some are professional programmers; but my base assumption is that none already know anything much about functional programming. Now, I can easily rant on about the glories of functional programming, but I'm a biased witness -- I've been doing this stuff too long. So this message is ask your help, especially if you are someone who has a somewhat-recent recollection of realising "wow, this fp stuff is so cool/useful/powerful/etc". I'm going to say some general things, of course, about purity and effects, modularity, types, testing, reasoning, parallelism and so on. But I hate general waffle, so I want to give concrete evidence, and that is what I particularly want your help with. I'm thinking of two sorts of "evidence": 1. Small examples of actual code. The goal here is (a) to convey a visceral idea of what functional programming *is*, rather than just assume the audience knows (they don't), and (b) to convey an idea of why it might be good. One of my favourite examples is quicksort, for reasons explained here: http://haskell.org/haskellwiki/Introduction#What.27s_good_about_functional_programming.3F But I'm sure that you each have a personal favourite or two. Would you like to send them to me, along with a paragraph or two about why you found it compelling? For this purpose, a dozen lines of code or so is probably a maximum. 2. War stories from real life. eg "In company X in 2004 they rewrote their application in Haskell/Caml with result Y". Again, for my purpose I can't tell very long stories; but your message can give a bit more detail than one might actually give in a presentation. The more concrete and specific, the better. E.g. what, exactly, about using a functional language made it a win for you? If you just reply to me, with evidence of either kind, I'll glue it together (regardless of whether I find I can use it in my talks), and put the result on a Wiki page somewhere. In both cases pointers to blog entries are fine. Quite a lot of this is FP-ish rather than Haskell-ish, but I'm consulting the Haskell mailing lists first because I think you'll give me plenty to go on; and because at least one of the talks *is* Haskell-specific. However, feel free to reply in F# or Caml if that's easier for you. Thanks! Simon From magr at cs.tu-berlin.de Wed Jan 23 09:09:44 2008 From: magr at cs.tu-berlin.de (Martin Grabmueller) Date: Wed Jan 23 09:10:16 2008 Subject: [Haskell] ANNOUNCE: Harpy 0.4 - Runtime code generation for x86 machine code Message-ID: <47974AA8.4060501@cs.tu-berlin.de> We are pleased to announce the release of Harpy 0.4, a library for runtime code generation for x86 machine code. Harpy is available from Hackage: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/harpy-0.4 Also see Harpy's homepage, which features two tutorials and access to the darcs repo (and to the Haddock documentation, until it is available from Hackage, too): http://uebb.cs.tu-berlin.de/harpy/ Harpy is supposed to be built with GHC 6.8 and GHC 6.6 (with Cabal 1.2 or greater). Please report any build problems you encounter. This release features the following additions and fixes: - New convenience top-level module "Harpy", which re-exports Harpy.CodeGenMonad, Harpy.Call and Harpy.X86Assembler - It is now possible to override Harpy's automatic code buffer management. The new field 'customCodeBuffer' in the type 'CodeGenConfig' can be set to 'Just (buf, size)', where 'buf' is a pointer to a memory region of 'size' bytes. Harpy will then use the supplied code buffer and will not perform any automatic code buffer allocation on overflow. Overflow checking is still performed and will result in an exception in the CodeGen monad. - When using the high-level assembler in X86Assembler, the code buffer is automatically protected from overflow. - Floating point operations added to X86Assembler (only for double operands yet). - Preliminary support for SSE instructions. Currently, only the packed and scalar floating-point arithmetic operations are supported (both in the low-level module Harpy.X86CodeGen and as methods in Harpy.X86Assembler) - Code buffer default size has been increased from 128 to 4096 bytes. - The CodeGenMonad fails when a label is defined twice. - It is now possible to associate names with labels, using the new operation newNamedLabel. The given names will show up in the disassembly, which makes debugging of generated code much easier. - The doc directory contains a second, slightly larger tutorial now. - The examples/evaluator directory contains a small example interpreter for arithmetic expressions, which translates expressions entered at the keayboard to machine code on the fly. This is the demo program we presented at the Haskell Workshop 2007. Happy Haskell Hacking with Harpy, Martin and Dirk -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 252 bytes Desc: OpenPGP digital signature Url : http://www.haskell.org/pipermail/haskell/attachments/20080123/4574b640/signature-0001.bin From zsol+lists at elte.hu Wed Jan 23 12:37:39 2008 From: zsol+lists at elte.hu (Zsolt Dollenstein) Date: Wed Jan 23 12:38:05 2008 Subject: [Haskell] Why functional programming matters In-Reply-To: <638ABD0A29C8884A91BC5FB5C349B1C316EC739C29@EA-EXMSG-C334.europe.corp.microsoft.com> References: <638ABD0A29C8884A91BC5FB5C349B1C316EC739C29@EA-EXMSG-C334.europe.corp.microsoft.com> Message-ID: <20080123183739.5fd154dc@thorium> Hi! My personal favourite is a neat (read: efficient and mostly write-only) way to balance AVL trees which I learned at a Haskell course on my university. This is the first implementation which comes to one's mind when playing with Trees: > data Tree a = L | N (T a) a (T a) Balanceness is defined in terms of a tree's height: > height :: T a -> Int > height L = 0 > height (N l a r) = 1 + max (height l) (height r) This gets the difference of the subtrees' heights: (Note that it could return a negative value, too.) > skew :: T a -> Int > skew L = 0 > skew (N l a r) = (height l)-(height r) Our tree is balanced iff the skew is at most 1 for every subtree: > balanced :: T a -> Bool > balanced L = True > balanced t@(N l a r) > | abs (skew t) <= 1 = balanced l && balanced r > | otherwise = False Now the interesting part. What if a tree is not balanced? Here do rotations come into the picture. There are several types of rotations which usually need some attention and are awkward to code in an imperative language. Of course one can do it in a functional language almost as awkward as in an imperative one, but the point is to use pattern matching like shown below: > rightRot :: T a -> T a > rightRot (N (N x a y) b z) = N x a (N y b z) > rightRot a = a This is one of the simplest cases which makes it relatively easy to read. The thing is that this is a really fast implementation achieved at almost no effort. Also, it doesn't get harder than this: > leftRightRot :: T a -> T a > leftRightRot (N (N x a (N y b z)) c v) = N (N x a y) b (N z c v) > leftRightRot a = a which can also be written as: > leftRightRot (N x a y) = rightRot (N (leftRot x) a y) So I think this was the moment when I made up my mind to commit myself to Haskell & FP. Cheers, Zsolt -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 481 bytes Desc: not available Url : http://www.haskell.org/pipermail/haskell/attachments/20080123/06b5561b/signature.bin From stephan.friedrichs at tu-bs.de Wed Jan 23 15:43:22 2008 From: stephan.friedrichs at tu-bs.de (Stephan Friedrichs) Date: Wed Jan 23 15:43:24 2008 Subject: [Haskell] Why functional programming matters In-Reply-To: <638ABD0A29C8884A91BC5FB5C349B1C316EC739C29@EA-EXMSG-C334.europe.corp.microsoft.com> References: <638ABD0A29C8884A91BC5FB5C349B1C316EC739C29@EA-EXMSG-C334.europe.corp.microsoft.com> Message-ID: <4797A6EA.3090209@tu-bs.de> Simon Peyton-Jones wrote: > [...] > > 2. War stories from real life. eg "In company X in 2004 they rewrote their application in Haskell/Caml with result Y". Again, for my purpose I can't tell very long stories; but your message can give a bit more detail than one might actually give in a presentation. The more concrete and specific, the better. E.g. what, exactly, about using a functional language made it a win for you? > We [1] implemented an ad-hoc chat system in Haskell in the SEP [2] at the TU-Braunschweig. The ad-hoc (there is no central server, every node has the same behaviour) protocol [3] (not of our making) is rather complicated, as each node on the network has to detect the neighbouring network topology in order to route messages to their destination: A <-> B <-> C Besides, it has to handle netsplit and -merge situations: Two separate networks might be connected by the spawning of a new node in between or split by the disappearance of the latter. There are public and private IRC-like channels, the latter is encrypted by a symmetric cipher. Besides, there is an anonymous channel obscuring a message's origin. On top of that we built a nice gtk2hs GUI. The project homepage is http://sep07.mroot.net/index.html. I regret it's not in English :( - But the source code and documentation [4] are. You can build the documentation from the snapshot [5]. The interesting thing about the project is, that it provides a nice mixture of IO (network), purely functional protocol handling and related data structures and a graphical user interface (GTK). Besides, it was implemented by 3 other groups (two using Java, one using C++) as well. Comparing the results, you see that the Haskell implementation is not only more stable and provides more features, it also has about 70% less code. Let me know, if you're interested in details. > > [...] > Hope this helps Stephan [1] 4 students: 2 experienced Haskell users and two newbies [2] a practical course where a non-trivial software project has to be planned, implemented and documented [3] http://sep07.mroot.net/documentation/draft-strauss-p2p-chat-09.txt [4] Complete repository available at: http://sep07.mroot.net:81/cgi-bin/darcsweb.cgi?r=SEP%202007%20-%20Ad-Hoc-Chatsystem;a=summary [5] http://sep07.mroot.net/snapshots/Barracuda-1.0.2.tar.bz2 -- Fr?her hie? es ja: Ich denke, also bin ich. Heute wei? man: Es geht auch so. - Dieter Nuhr -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 252 bytes Desc: OpenPGP digital signature Url : http://www.haskell.org/pipermail/haskell/attachments/20080123/da3abfec/signature.bin From kid.meier at gmail.com Fri Jan 25 08:22:14 2008 From: kid.meier at gmail.com (Michael Reid) Date: Fri Jan 25 08:22:27 2008 Subject: [Haskell] Re: [Haskell-cafe] Why functional programming matters In-Reply-To: <7f692fec0801241013h6b1e1d17p50e7a1dd1b38c666@mail.gmail.com> References: <638ABD0A29C8884A91BC5FB5C349B1C316EC739C29@EA-EXMSG-C334.europe.corp.microsoft.com> <7f692fec0801241013h6b1e1d17p50e7a1dd1b38c666@mail.gmail.com> Message-ID: <4799E286.7070809@gmail.com> Yaakov Nemoy wrote: > I'm still very much a newbie, but the one thing that struck me as the > best feature coming from Python is the static typing. Changing the > type of a function in Python will lead to strange runtime errors that > take some work to debug, whereas, when I tinker with a program in > Haskell, I already know it will work once it compiles. > I'm quite new to Haskell as well and I must echo this sentiment. The mainstream has somewhat realized that its a waste of time to tell the compiler the type of _everything_. Learning Haskell has completely reversed my feeling that static typing is an old outdated idea. The power of Haskell's type system makes it feel like you are programming in a dynamic language to some degree, yet all of it is type-checked, and that is just *really* cool. Honestly, when I first started reading a Haskell tutorial I was convinced that it was an runtime-typed language like Python. When the tutorial moved on to explain that it is statically typed I could barely believe it. The second thing I might want to highlight is the power of monads and other techniques like arrows and FRP. Granted, these are not easy concepts to impart in a talk, but I think they were really an important discovery in FP as they deal with the "problem" of IO in such a beautifully orthogonal way. Following on that, more advanced structures like arrows and how all of this can contribute to really powerful DSLs I think is a pretty big selling point. Actually, come to think of it, one great way to show off the language is to show off the power of some of the libraries that have been written. For example, show how easily a parser can be created w/ Parsec; or show an example of FRP w/ Yampa. These examples will likely tantalize the programmers in the audience to want to learn more. Good luck! /mike. From waldmann at imn.htwk-leipzig.de Fri Jan 25 08:58:52 2008 From: waldmann at imn.htwk-leipzig.de (Johannes Waldmann) Date: Fri Jan 25 08:58:31 2008 Subject: [Haskell] Re: [Haskell-cafe] Why functional programming matters In-Reply-To: <4799E286.7070809@gmail.com> References: <638ABD0A29C8884A91BC5FB5C349B1C316EC739C29@EA-EXMSG-C334.europe.corp.microsoft.com> <7f692fec0801241013h6b1e1d17p50e7a1dd1b38c666@mail.gmail.com> <4799E286.7070809@gmail.com> Message-ID: <4799EB1C.8080408@imn.htwk-leipzig.de> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 > Actually, come to think of it, one great way to show off the language is > to show off the power of some of the libraries that have been written. > For example, show how easily a parser can be created w/ Parsec; [...] yes, Parsec is amazing. I use it in my e-Learning/testing system. It uses Parsec to read (student) input from a text entry area in a CGI application. http://www.imn.htwk-leipzig.de/~waldmann/autotool/ Parsec shows the benefits of embedding a DSL into Haskell: it gives you full combinatorial power: in types (e.g. lists of parser) and functions (e.g. from parser to parser), and all that with full safety. best regards, Johannes -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.4-svn0 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFHmesc3ZnXZuOVyMIRAl2vAJ0VViyJe4tcxFiVpMR0suO50Bez5wCeIwi+ BK4GC4cqv5K25lT2k7B80zY= =jz0r -----END PGP SIGNATURE----- From s.clover at gmail.com Sat Jan 26 23:01:12 2008 From: s.clover at gmail.com (Sterling Clover) Date: Sat Jan 26 23:00:54 2008 Subject: [Haskell] ANN: HStringTemplate 0.2 In-Reply-To: <89B71013-9550-4E1F-91DD-A4ABD532F2F1@gmail.com> References: <89B71013-9550-4E1F-91DD-A4ABD532F2F1@gmail.com> Message-ID: <99CAE147-75DE-4EFC-94FF-A0029C126FF9@gmail.com> HStringTemplate is a general purpose templating system, geared especially towards HTML and based on Terrence Parr?s Java library. On Hackage at: http://hackage.haskell.org/cgi-bin/hackage-scripts/ package/HStringTemplate-0.2 Development version at: darcs get http://code.haskell.org/ HStringTemplate/ Haddocks at: http://code.haskell.org/HStringTemplate/dist/doc/html/ HStringTemplate/Text-StringTemplate.html Additional documentation on the grammar at: http://www.antlr.org/wiki/ display/ST/StringTemplate+3.1+Documentation as well as in some posts at http://fmapfixreturn.wordpress.com Lots of cleanup, lots of additions, hopefully this is an extremely usable release. Still no group or interface files, but I suspect that those are mainly useful for code-generation, which seems like something Haskell programmers would want to use something other than a templating system for in any case. On to the good stuff: * Now on hackage! * Generics. Not one but two types. One set of simple bindings for the standard Data class, and one for syb-with-class. (Alex Drummond?s RJson library, which is really cool, was very helpful in figuring out how to do this). * A withContext method that turns any set of name-value bindings into the context for a StringTemplate. Along with the syb-with-class bindings, this should make for relatively seamless interoperability with HAppS. * Lots of other additional bindings for working with standard time formats, numeric types, etc. * Encoders. A standard mechanism for HTML-escaping strings (or javascript-escaping, or urlencoding them, or etc.) that A) ensures it happens uniformly and B) ensures it happens no more than once. * Improved pretty printing support, eliminating corner-cases where wrapping did not occur. * Creation of directory groups is now done properly in the IO monad, with caching functionality moved to the scarily-named unsafeVolatileDirectoryGroup. * 80% Top-Level testing coverage in the base. (And more to come, but I only have so much time). And of course, patches and feedback always welcome. --Sterl From bringert at cs.chalmers.se Mon Jan 28 05:52:25 2008 From: bringert at cs.chalmers.se (=?ISO-8859-1?Q?Bj=F6rn_Bringert?=) Date: Mon Jan 28 05:51:59 2008 Subject: [Haskell] 4th Haskell Hackathon, April 11-13 in Gothenburg, Sweden Message-ID: <01FF1A6F-F793-4087-ABA5-90B5F111AFC6@cs.chalmers.se> ------------------------------------------------------------------------ Hac4 4th Haskell Hackathon April 11-13, 2008 Gothenburg, Sweden http://haskell.org/haskellwiki/Hac4 ------------------------------------------------------------------------ We are pleased to announce the 4th Haskell Hackathon! The event will be held over 3 days, April 11-13, at Chalmers University of Technology in Gothenburg, Sweden. The plan is to hack on Haskell infrastructure, tools, libraries and compilers. To attend please register, and get ready to hack those lambdas! Code to hack on: * Hackage * Cabal * Porting foreign libraries * Bug squashing * You decide! Before you attend, do start thinking and familiarizing yourself with 1 or 2 projects you wish to work on, to ensure no wasted effort during the Hackathon. A list of possible projects is available on the website. == Registration == We ask that you register you interest. Follow the instructions on the registration page: http://haskell.org/haskellwiki/Hac4/Register Once you've registered, do add your info to the attendees self-organizing page, http://haskell.org/haskellwiki/Hac4/Attendees if you are looking to share costs, or meet up prior to the hackathon, with other attendees. N.B. if you already expressed interest via the wiki, do confirm by registering `officially' anyway. == Important dates == Hackathon: April 11-13, 2008 == Organizers == Bj?rn Bringert Thomas Schilling Lennart Kolmodin -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/haskell/attachments/20080128/8ed40806/attachment-0001.htm From pardo at fing.edu.uy Tue Jan 29 13:39:20 2008 From: pardo at fing.edu.uy (Alberto Pardo) Date: Tue Jan 29 13:39:48 2008 Subject: [Haskell] School LERNET 2008 *** Deadline extension for registration *** Message-ID: <479F72D8.4070406@fing.edu.uy> =================================================================== *** DEADLINE EXTENSION FOR REGISTRATION *** Call for Participation International Summer School on Language Engineering and Rigorous Software Development LERNET 2008, Piriapolis, Uruguay February 25 to March 1, 2008 http://www.fing.edu.uy/inco/eventos/lernet2008 email: lernet@fing.edu.uy *** NEW DEADLINE FOR REGISTRATION: February 4 *** *** DEADLINE FOR GRANT APPLICATION: January 31 *** =================================================================== The aim of the school is the dissemination of advanced scientific knowledge and the promotion of international contacts among scientists. The school is oriented to students and researchers working in computer science and interested in formal techniques for the design and construction of software systems and programming languages. The school is partially supported by the EU LerNet ALFA project (http://www.di.uminho.pt/lernet/), which implements a joint PhD programme on Software Design and Programming Language Engineering, based on a co-tutoring scheme and conformed by 6 european universities and 5 from Latin America. PROGRAM LERNET 2008 will consist of six courses: - Introduction to Type Theory Herman Geuvers (Radboud University Nijmegen, The Netherlands) - Theory and Applications of the PF-transform Jose Nuno Oliveira (University of Minho, Portugal) - Embedded Domain Specific Languages: Combinator Parsers Doaitse Swierstra (Utrecht University, The Netherlands) - Dependent Types at Work Peter Dybjer and Ana Bove (Chalmers University, Sweden) - Formal Programming Language Semantics with Inductive Types Yves Bertot (INRIA Sophia-Antipolis, France) - Verification Methods for Software Security and Correctness Gilles Barthe (INRIA Sophia-Antipolis, France) In addition, there will be some PhD sessions where students from the LerNet project will expose advances of their PhD thesis. VENUE LERNET 2008 will be held at Argentino Hotel (http://www.argentinohotel.com.uy), located in Piri?polis, a seaside city, 100 kms east from Montevideo. REGISTRATION To register, fill in the registration form at http://www.cs.chalmers.se/Cs/Research/Logic/LerNet08/registration.html The deadline for registration has been *extended*. The new deadline is February 4, 2008. FEES Details about the registration fees can be found in the school's webpage (http://www.fing.edu.uy/inco/eventos/lernet2008). GRANTS We may be able to offer a reduction in the value of the registration fee to a limited number of students. Priority will be given to students from Latin America. Details of the fee reduction application can be found in the school's webpage (http://www.fing.edu.uy/inco/eventos/lernet2008). The deadline for grant application is January, 31 2008. **Note that this deadline has not been extended**. SCHOOL ORGANISERS Luis Barbosa (Univerity of Minho, Portugal) Ana Bove (Chalmers University, Sweden) Alberto Pardo (Universidad de la Rep?blica, Uruguay) Jorge Sousa Pinto (Univerity of Minho, Portugal) LOCAL ORGANISATION Alberto Pardo Luis Sierra Carlos Luna Instituto de Computaci?n Facultad de Ingenier?a Universidad de la Rep?blica Montevideo, Uruguay FURTHER INFORMATION For further details on the school, visit the webpage http://www.fing.edu.uy/inco/eventos/lernet2008 From koen at chalmers.se Wed Jan 30 03:40:40 2008 From: koen at chalmers.se (Koen Claessen) Date: Wed Jan 30 03:40:02 2008 Subject: [Haskell] PhD positions in Functional Programming at Chalmers in Sweden Message-ID: <1b30d3c80801300040he01974cwe42e9a7c6204f31b@mail.gmail.com> (apologies for multiple copies) ** please forward this to interested students ** PhD Positions in Functional Programming at the department of Computer Science and Engineering at Chalmers University of Technology, Sweden http://www.cs.chalmers.se/~koen/phdad.html Application deadline: March 11, 2008 Position starts: April 1, 2008 or September 1, 2008 The PhD student will join the research activities at our department in applications of functional programming, much of which concentrates on the design and application of Domain Specific Embedded Languages. Examples of our work are QuickCheck for specification-guided random testing, and Lava for hardware design and verification. Our group has also developed the award winning automated first-order logic reasoning tools Paradox and Equinox, which are both written in Haskell. There are advertised positions in two focus areas: 1. Development of the next generation of Paradox and Equinox, which involves inventing new programming techniques for building a modular, flexible automated reasoning tool, as well as developing novel automated reasoning algorithms. As new exciting applications for automated reasoning tools arise, new demands are placed on the reasoning tools, forcing changes in how they are designed and implemented. 2. Development of verification techniques for distributed systems implemented in the functional programming language Erlang. Methods here include QuickCheck-based testing, model checking and (automated) theorem proving techniques, and integration of these different techniques. There is a possibility of attacking real-world problems from our industrial partners. For more information, please look at: http://www.cs.chalmers.se/~koen/phdad.html Koen Claessen John Hughes From johanj at cs.uu.nl Wed Jan 30 14:26:20 2008 From: johanj at cs.uu.nl (Johan Jeuring) Date: Wed Jan 30 14:25:52 2008 Subject: [Haskell] Presentations at Dutch Functional Programming Day 2008 Message-ID: <536C3475-5AC9-45E1-A0E2-D0B30B48F26E@cs.uu.nl> Most of the presentations at the Dutch Functional Programming Day 2008 are now available on-line: http://people.cs.uu.nl/johanj/FPDag2008/ All slides are in English. -- Johan From yminsky at janestcapital.com Wed Jan 30 16:24:38 2008 From: yminsky at janestcapital.com (Yaron Minsky) Date: Wed Jan 30 16:23:58 2008 Subject: [Haskell] 2008 OCaml Summer Project Message-ID: <1201728278.7445.285.camel@nyc-qws-018.delacy.com> I hope this isn't deemed too off-topic for a Haskell list, since OCaml and Haskell are close relatives on good terms. In any case: I am pleased to announce the second OCaml Summer Project! The OSP is aimed at encouraging growth in the OCaml community by funding students over the summer to work on open-source projects in OCaml. We'll fund up to three months of work, and at the end of the summer, we will fly the participants out for a meeting in New York, where people will present their projects and get a chance to meet with other members of the OCaml community. The project is being funded and run by Jane Street Capital. Jane Street makes extensive use of OCaml, and we are excited about the idea of encouraging and growing the OCaml community. Our goal this year is to get both faculty and students involved. To that end, we will require joint applications from the student or students who will be working on the project, and from a faculty member who both recommends the students and will mentor them throughout the project. Each student will receive a grant of $5k/month for over the course of the project, and each faculty member will receive $2k/month. We expect students to treat this as a full-time commitment, and for professors to spend the equivalent of one day a week on the project. We will also award a prize for what we deem to be the most successful project. Special consideration will be given to projects that display real polish in the form of good documentation, robust build systems, and effective test suites. We'll announce more details about the prize farther down the line. If you'd like to learn more about the OSP and how to apply, you can look at our website here: http://ocamlsummerproject.com Please direct any questions or suggestions you have to osp@janestcapital.com. y -- Yaron Minsky From bernardy at chalmers.se Thu Jan 31 09:40:32 2008 From: bernardy at chalmers.se (Jean-Philippe Bernardy) Date: Thu Jan 31 09:39:50 2008 Subject: [Haskell] Announce: Yi 0.3 Message-ID: <953e0d250801310640l7fefd787l49c71f3c9d57e79@mail.gmail.com> Hello folks, I'm please to announce the 0.3 release of the Yi editor. Yi is a text editor written and extensible in Haskell. The long-term goal of the Yi project is to provide the editor of choice for Haskell programmers. In the meantime, we have fun by hacking an editor in a decent language :) Yi is not a finished product: this is a developer pre-release. However, Yi has become a lot more accessible than previously, so if you consider hacking on it, now might be a good time to take a look. Features * A purely functional editor core; * Keybindings written as parsers of the input; * Emacs and Vim emulations provided by default; * Vty, Gtk2Hs?, and (experimental) Cocoa frontends; * Embedding of GHC API for quick hacks and configuration. Links * release notes: http://code.google.com/p/yi-editor/wiki/ReleaseNotes0o3 * download: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/yi-0.3 * FAQ: http://haskell.org/haskellwiki/Yi/FAQ * homepage: http://haskell.org/haskellwiki/Yi * API documentation: http://code.haskell.org/yi/doc/ * check and report issues: http://code.google.com/p/yi-editor/issues/list * darcs repository: http://code.haskell.org/yi * get involved: mailto:yi-devel@googlegroups.com This release is brought to you by: Allan Clark, Andrew Birkett, Ben Moseley, Corey O'Connor, Daniel McAllansmith, Fraser Wilson, Gustav Munkby, Gwern Branwen, Jean-Philippe Bernardy, Jens Petersen, Massimiliano Gubinelli, Michael Maloney, Nicolas Pouillard, Paulo Tanimoto, Scott Williams, Thomas Schilling.