[Haskell-cafe] Multi Line String literals

2007-04-26 Thread Bas van Dijk

Hello,

Just for fun I'm trying to define multi line string literals. I have
the following code and I'm wondering if it can be improved
(understandability, elegance, performance): http://hpaste.org/1582
(look at the second annotation)

regards,

Bas van Dijk
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Multi Line String literals

2007-04-26 Thread Joe Thornber

On 26/04/07, Bas van Dijk [EMAIL PROTECTED] wrote:

test = putStrLn $ toIsString $ do I
   need
   MultiLine
   String
   literals!


but it's simpler to just write something like:

test  = putStr $ unlines [I,
  need,
  multiline,
  string,
  literals]

- Joe
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Multi Line String literals

2007-04-26 Thread Stefan O'Rear
On Thu, Apr 26, 2007 at 01:43:09PM +0100, Joe Thornber wrote:
 On 26/04/07, Bas van Dijk [EMAIL PROTECTED] wrote:
 test = putStrLn $ toIsString $ do I
need
MultiLine
String
literals!
 
 but it's simpler to just write something like:
 
 test  = putStr $ unlines [I,
   need,
   multiline,
   string,
   literals]

How does

test  = putStr I\n\
   \need\n\
   \multiline\n\
   \string\n\
   \literals\n

look?

Stefan
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Multi Line String literals

2007-04-26 Thread Neil Mitchell

Hi


How does

test  = putStr I\n\
   \need\n\
   \multiline\n\
   \string\n\
   \literals\n

look?


Like the cpp will choke and die :) Multiline string literals were one
of the motivations for cpphs.

Thanks

Neil
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Multi Line String literals

2007-04-26 Thread Alex Queiroz

Hallo,

On 4/26/07, Neil Mitchell [EMAIL PROTECTED] wrote:


Like the cpp will choke and die :) Multiline string literals were one
of the motivations for cpphs.



Does cpphs allow me to include a whole file into a Haskell source
file, inserting automatically the string gaps?

--
-alex
http://www.ventonegro.org/
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Multi Line String literals

2007-04-26 Thread Neil Mitchell

Hi


 Does cpphs allow me to include a whole file into a Haskell source
file, inserting automatically the string gaps?


No, but Hugs does with Here documents.

Thanks

Neil
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Multi Line String literals

2007-04-26 Thread Alex Queiroz

Hallo,

On 4/26/07, Neil Mitchell [EMAIL PROTECTED] wrote:


No, but Hugs does with Here documents.



Unfortunately I'm using GHC but thanks!

Cheers,
--
-alex
http://www.ventonegro.org/
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Multi Line String literals

2007-04-26 Thread Matthew Sackman
Alex Queiroz [EMAIL PROTECTED] wrote:
 On 4/26/07, Neil Mitchell [EMAIL PROTECTED] wrote:
  Like the cpp will choke and die :) Multiline string literals were one
  of the motivations for cpphs.
 
  Does cpphs allow me to include a whole file into a Haskell source
 file, inserting automatically the string gaps?

My hinstaller library certainly does. Though it currently allows you to
only output that file to another file. I could easily improve it to
allow output to a Handle.
http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hinstaller

Matthew
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Compilling GHC on Vista

2007-04-26 Thread Simon Marlow

Claus Reinke wrote:

gcc version 3.4.2 (mingw-special)
configure:3288: $? = 0
configure:3295: c:/MinGW/bin/gcc -V 5
gcc.exe: `-V' option must have argument
configure:3298: $? = 1
configure:3321: checking for C compiler default output file name
configure:3348: c:/MinGW/bin/gccconftest.c  5
ld: /mingw/lib/crt2.o: No such file: No such file or directory


not sure whether this is relevant, but there is no drive letter in that 
library path.


cygwin doesn't know about /mingw anyway, but if i am in a cmd shell,
it does matter what drive i'm on, as absolute paths without drive letter
will default to the root of that drive:

   D:\c:\mingw\bin\ld \mingw\lib\crt2.o -M | find OUTPUT
   c:\mingw\bin\ld: \mingw\lib\crt2.o: No such file: No such file or 
directory


   C:\c:\mingw\bin\ld \mingw\lib\crt2.o -M | find OUTPUT
   ..
   OUTPUT(a.exe pei-i386)


I suspect this may be because gcc has managed to pick up the Cygwin ld instead 
of the mingw one.  Monique - what exactly is your PATH?  What happens when you 
say 'ld --version'?


Cheers,
Simon
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Re: Compilling GHC on Vista

2007-04-26 Thread Claus Reinke
I suspect this may be because gcc has managed to pick up the Cygwin ld instead of the mingw one. 
Monique - what exactly is your PATH?  What happens when you say 'ld --version'?


'ld --version'  doesn't show differences between mingw/cygwin, does it?

and even the mingw ld apparently sets its search_dirs without drive letters:

   $ type -ap ld
   /cygdrive/c/MinGW/bin/ld

   $ ld --verbose | head
   GNU ld version 2.16.91 20050827
 Supported emulations:
  i386pe
   using internal linker script:
   ==
   /* Default linker script, for normal executables */
   OUTPUT_FORMAT(pei-i386)
   SEARCH_DIR(/mingw/mingw32/lib); SEARCH_DIR(/mingw/lib); SEARCH_DIR(/usr/local/lib); 
SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib);

   ENTRY(_mainCRTStartup)
   SECTIONS

and, even under a cygwin bash calling a mingw ld, this won't work if we're not
on the drive on which /mingw was installed:

   $ pwd
   /cygdrive/d

   $ ld /mingw/lib/crt2.o -M | grep OUTPUT
   c:\MinGW\bin\ld.exe: /mingw/lib/crt2.o: No such file: No such file or 
directory

whereas:

   $ cd c:

   $ ld /mingw/lib/crt2.o -M | grep OUTPUT
   ..
   OUTPUT(a.exe pei-i386)

claus

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Getting the number of seconds since epoch from System.Time.ClockTime

2007-04-26 Thread Martin Percossi

Hello haskell-cafe,

In System.Time,

data ClockTime = TOD Integer Integer

, where the first integer represents the number of seconds since epoch, 
and the other represents the number of picoseconds. Is there a way of 
retrieving the first part? (In Haskell 98, the ClockTime type is abstract).


TIA
Martin

My music: http://www.youtube.com/profile?user=thetonegrove
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Re: Compilling GHC on Vista

2007-04-26 Thread Claus Reinke

and even the mingw ld apparently sets its search_dirs without drive letters:


that shouldn't be the problem, though, as the failing part of ./configure was
an indirect call via gcc, which seems to set the library prefixes correctly, 
when
calling collect2 (see  below). it was just that the error message looked
exactly right. Monique, perhaps you could send the output from the little test
below, on your system, to compare (win/xp here)?

claus

   $ pwd
   /cygdrive/d/tmp

   $ cat t.c
   int main()
   {
   exit(0);
   }

   $ c:/MinGW/bin/gcc --verbose t.c
   Reading specs from c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/specs
   Configured with: 
../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=mingw32 --target=min

   gw32 --prefix=/mingw --enable-threads --disable-nls 
--enable-languages=c,c++,f77,ada,objc,java --dis
   able-win32-registry --disable-shared --enable-sjlj-exceptions --enable-libgcj --disable-java-awt 
--w

   ithout-x --enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter 
--enable-hash-synchroniz
   ation --enable-libstdcxx-debug
   Thread model: win32
   gcc version 3.4.2 (mingw-special)
c:/MinGW/bin/../libexec/gcc/mingw32/3.4.2/cc1.exe -quiet -v -iprefix 
c:\MinGW\bin\../lib/gcc/mingw3
   2/3.4.2/ t.c -quiet -dumpbase t.c -auxbase t -version -o 
C:\DOCUME~1\cr3\LOCALS~1\Temp/ccE5.s
   ignoring nonexistent directory 
c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../mingw32/include

   ignoring nonexistent directory /mingw/include
   ignoring nonexistent directory /mingw/include
   ignoring nonexistent directory /mingw/lib/gcc/mingw32/3.4.2/include
   ignoring nonexistent directory /mingw/mingw32/include
   ignoring nonexistent directory /mingw/include
   #include ... search starts here:
   #include ... search starts here:
c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include
c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/include
   End of search list.
   GNU C version 3.4.2 (mingw-special) (mingw32)
   compiled by GNU C version 3.4.2 (mingw-special).
   GGC heuristics: --param ggc-min-expand=99 --param ggc-min-heapsize=130830
c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../mingw32/bin/as.exe -o 
C:\DOCUME~1\cr3\LOCALS~1\Temp/cc80baaa.o C:\DOCUME~1\cr3\LOCALS~1\Temp/ccE5.s

c:/MinGW/bin/../libexec/gcc/mingw32/3.4.2/collect2.exe -Bdynamic


c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../crt2.o 
c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/crtbegin.o



   -Lc:/MinGW/bin/../lib/gcc/mingw32/3.4.2 -Lc:/MinGW/bin/../lib/gcc
   -Lc:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../mingw32/lib
   -Lc:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../.. 
C:\DOCUME~1\cr3\LOCALS~1\Temp/cc80baaa.o
   -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt -luser32 -lkernel32 -ladvapi32 -lshell32 -lmingw32 
-lgcc

   -lmoldname -lmingwex -lmsvcrt c:/MinGW/bin/../lib/gcc/mingw32/3.4.2/crtend.o

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: [Haskell] Newbie: what are the advantages of Haskell?

2007-04-26 Thread Joel Reymont
The biggest advantage of Haskell to me is that it helps me write  
better programs in other languages.


For one reason or another Haskell never turns out to be my final  
implementation language my my programs gain in the process.


Joel

--
http://wagerlabs.com/





___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Haskell Job Opportunity

2007-04-26 Thread S. Alexander Jacobson


HAppS LLC has part-time and full-time positions open for haskell programmers to:

 * improve the open source haskell codebase at HAppS.org
 * implement infrastructure to make it work well in Amazon S3/EC2 environments
 * make http://pass.net reliable enough to be used by live apps
 * build the mass market apps we want to run on top of the HAppS/Pass.net 
platform

We are looking for people who:

 * have substantial experience programming Haskell
 * have experience building Internet apps (not necessarily in Haskell but would 
be good), and
 * live in any of these places:
* the Internet (with comfort working entirely over email,skype,tightVNC 
etc.)
* New York
* San Francisco
* Los Angeles

If you qualify and are interested, please send an email with your cv/resume to 
me or to opportunity AT happs.org.


-Alex-


___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Stack overflow with my Trie implementation

2007-04-26 Thread Pete Kazmier
I've modified my Norvig spelling corrector to use a trie instead of
Data.Map in the hopes of improving performance.  Plus, this is fun and
a great learning exercise for me.  Unfortunately, when I load my trie
with a large amount of data, I get a stack overflow.  It's unclear to
me why this is happening.  I specifically use foldl' to avoid this
situation when building my trie.  Could someone shed some light on the
situation for me?

Here is the code:

 module Main where 
 
 import Data.List (foldl')
 import Data.Maybe (maybe, fromMaybe)
 import Prelude hiding (lookup)
 import qualified Data.Map as M
 
 data Trie a = T (Maybe a) (M.Map Char (Trie a)) deriving (Show)
 
 main = do
 -- big.txt is a large file of words: http://www.norvig.com/big.txt
 c - readFile big.txt
 let freqTrie = foldl' incWordCount empty (words c)
 print $ lookup evening freqTrie
 where 
   incWordCount m w = insertWith (+) w 1 m
 
 empty :: Trie a
 empty = T Nothing M.empty
 
 lookup :: String - Trie a - Maybe a
 lookup ([])   (T Nothing  m) = Nothing
 lookup ([])   (T (Just v) m) = return v
 lookup (k:ks) (T _m) = case M.lookup k m of
  Nothing   - Nothing
  Just trie - lookup ks trie
 
 findWithDefault :: a - String - Trie a - a
 findWithDefault v k t = fromMaybe v (lookup k t)
 
 member :: String - Trie a - Bool
 member k t = maybe False (const True) (lookup k t)
 
 insertWith :: (a - a - a) - String - a - Trie a - Trie a
 insertWith fn ([])   v (T Nothing   m) = T (Just v) m
 insertWith fn ([])   v (T (Just v') m) = T (Just $ fn v v') m
 insertWith fn (k:ks) v (T mvm) = T mv (M.insertWith const k newtrie m)
 where
   oldtrie = M.findWithDefault empty k m
   newtrie = insertWith fn ks v oldtrie

 {-- I also tried to use this line instead of the one above to see
 if this had any impact.  Unfortunately, I obtained the same 
 results.
 
 insertWith fn ([])   v (T (Just v') m) = let x = fn v v' in seq x T (Just x) m
 --}



___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Stack overflow with my Trie implementation

2007-04-26 Thread Adrian Hey

Pete Kazmier wrote:

I've modified my Norvig spelling corrector to use a trie instead of
Data.Map in the hopes of improving performance.  Plus, this is fun and
a great learning exercise for me.  Unfortunately, when I load my trie
with a large amount of data, I get a stack overflow.  It's unclear to
me why this is happening.  I specifically use foldl' to avoid this
situation when building my trie.  Could someone shed some light on the
situation for me?

Here is the code:

module Main where 


import Data.List (foldl')
import Data.Maybe (maybe, fromMaybe)
import Prelude hiding (lookup)
import qualified Data.Map as M

data Trie a = T (Maybe a) (M.Map Char (Trie a)) deriving (Show)


Try making it strict in the Map field..

 data Trie a = T (Maybe a) !(M.Map Char (Trie a)) deriving (Show)

Regards
--
Adrian Hey
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] ANN: London Haskell User Group

2007-04-26 Thread Neil Bartlett
I am delighted to announce the first meeting of the London Haskell  
User Group on Wednesday 23rd May from 6:30PM. The meeting will be  
held at City University's main campus in central London, and Simon  
Peyton Jones will be coming to give a talk.


Please see the announcement on the web page for more details and to  
register:


http://www.londonhug.net/2007/04/26/announcement-first-meeting-of-the- 
london-haskell-user-group/


Many thanks to Simon, and to Ross Paterson at City University for  
organising the room.


Regards,
Neil
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Obscure instances for Obscure types

2007-04-26 Thread Neil Mitchell

Hi

I currently maintain two libraries, TagSoup which defines the Tag data
type, and BinaryDefer, which defines the BinaryDefer class. If I
wanted to include an instance for BinaryDefer Tag, where would I put
it?

Putting it in either library introduces an artificial dependency on
the other. Putting it in a separate libary makes the library about 4
lines long and is just annoying. Putting it in the individual
application(s) is exactly what libraries were designed to avoid.

Is there a solution?

Thanks

Neil
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Obscure instances for Obscure types

2007-04-26 Thread Nicolas Frisby

I've had a similar question, which I think boiled down to a
compilation issue. Consider packages A and B that can be defined
independently. But, just as Neil pointed out, perhaps A and B could
also interact beyond their basic definition.

My naive idea is that A would compile the simple independent way if B
wasn't around and vice versa. But if A and B were both present at
compile time, then their interaction would also be compiled. The open
question is then where does that interaction live?

I would guess this problem has been solved in other systems. Anything
come to mind?

On 4/26/07, Neil Mitchell [EMAIL PROTECTED] wrote:

Hi

I currently maintain two libraries, TagSoup which defines the Tag data
type, and BinaryDefer, which defines the BinaryDefer class. If I
wanted to include an instance for BinaryDefer Tag, where would I put
it?

Putting it in either library introduces an artificial dependency on
the other. Putting it in a separate libary makes the library about 4
lines long and is just annoying. Putting it in the individual
application(s) is exactly what libraries were designed to avoid.

Is there a solution?

Thanks

Neil
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Obscure instances for Obscure types

2007-04-26 Thread Dan Weston
Taking a lesson from relational databases, I'd put it in 5-normal form: 
a separate module importing its two dependencies.


Don't forget the 2nd law of thermodynamics: no 4-line file will stay 4 
lines long after repeated code iterations. You might as well plan for 
the inevitable.


If it's too annoying to wait for that inevitability, try commenting the 
hell out of it until it has a respectable number of lines.


Dan

Neil Mitchell wrote:

Hi

I currently maintain two libraries, TagSoup which defines the Tag data
type, and BinaryDefer, which defines the BinaryDefer class. If I
wanted to include an instance for BinaryDefer Tag, where would I put
it?

Putting it in either library introduces an artificial dependency on
the other. Putting it in a separate libary makes the library about 4
lines long and is just annoying. Putting it in the individual
application(s) is exactly what libraries were designed to avoid.

Is there a solution?

Thanks

Neil
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe





___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Obscure instances for Obscure types

2007-04-26 Thread Neil Mitchell

Hi Dan,


Don't forget the 2nd law of thermodynamics: no 4-line file will stay 4
lines long after repeated code iterations. You might as well plan for
the inevitable.


If this library is for the extra interactions available when using a
libary with 2 classes (thats all BinaryDefer is likely to ever have)
and 1 data structure (thats all TagSoup is likely to ever have) I get
2 possible instances - and not a lot of scope for growth.


If it's too annoying to wait for that inevitability, try commenting the
hell out of it until it has a respectable number of lines.


Comments are for people who can't sense what their code does from the
indentation :-) That and Haddock doesn't let you comment instances in
any way that shows up, so all my beautiful comments would be lost.

Thanks

Neil





Dan

Neil Mitchell wrote:
 Hi

 I currently maintain two libraries, TagSoup which defines the Tag data
 type, and BinaryDefer, which defines the BinaryDefer class. If I
 wanted to include an instance for BinaryDefer Tag, where would I put
 it?

 Putting it in either library introduces an artificial dependency on
 the other. Putting it in a separate libary makes the library about 4
 lines long and is just annoying. Putting it in the individual
 application(s) is exactly what libraries were designed to avoid.

 Is there a solution?

 Thanks

 Neil
 ___
 Haskell-Cafe mailing list
 Haskell-Cafe@haskell.org
 http://www.haskell.org/mailman/listinfo/haskell-cafe






___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Obscure instances for Obscure types

2007-04-26 Thread Robin Green
On Fri, 27 Apr 2007 00:40:33 +0100
Neil Mitchell [EMAIL PROTECTED] wrote:

  If it's too annoying to wait for that inevitability, try commenting
  the hell out of it until it has a respectable number of lines.
 
 Comments are for people who can't sense what their code does from the
 indentation :-)

A bit of an exaggeration. I've written points-free code that *needs*
comments in order for *me* to understand it six months later. ;)

 That and Haddock doesn't let you comment instances in
 any way that shows up, so all my beautiful comments would be lost.

Yes, but you can still comment the module that contains them, which
does show up, and manually list the instances. Since the number of
instances is so small, this isn't hard.

-- 
Robin
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] New HaskODell user groups

2007-04-26 Thread Donald Bruce Stewart
I've created a new wiki page documenting all the new user groups for
Haskell that are springing up!

http://haskell.org/haskellwiki/User_groups

If you're starting a new group, please add it here, and publicise.

-- Don

P.S.  Some obvious user group candidates, in my opinion, would be a
Portland group, a Bay Area group and something at Chalmers... ;-)
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Haskell Weekly News: April 27, 2007

2007-04-26 Thread Donald Bruce Stewart
---
Haskell Weekly News
http://sequence.complete.org/hwn/20070427
Issue 61 - April 27, 2007
---

   Welcome to issue 61 of HWN, a weekly newsletter covering developments
   in the [1]Haskell community.

   The last week was a very exciting week for the Haskell community, with
   a new GHC release, the first release of Xmonad, a window manager
   written in Haskell, and DisTract, a new distributed bug tracker,
   written in Haskell. A number of new Haskell jobs were announced, and
   several new user groups were formed!

   1. http://haskell.org/

Announcements

   GHC 6.6.1. Ian Lynagh [2]announced a new patchlevel release of GHC.
   This release contains a significant number of bugfixes relative to
   6.6, so we recommend upgrading. Release notes are [3]here. GHC is a
   state-of-the-art programming suite for Haskell. Included is an
   optimising compiler generating good code for a variety of platforms,
   together with an interactive system for convenient, quick development.
   The distribution includes space and time profiling facilities, a large
   collection of libraries, and support for various language extensions,
   including concurrency, exceptions, and foreign language interfaces.

   2. http://article.gmane.org/gmane.comp.lang.haskell.glasgow.user/12075
   3. http://haskell.org/ghc/docs/6.6.1/html/users_guide/release-6-6-1.html

   Xmonad 0.1. Spencer Janssen [4]announced the inaugural release of
   [5]Xmonad. Xmonad is a minimalist tiling window manager for X, written
   in Haskell. Windows are managed using automatic layout algorithms,
   which can be dynamically reconfigured. At any time windows are
   arranged so as to maximise the use of screen real estate. All features
   of the window manager are accessible purely from the keyboard: a mouse
   is entirely optional. Xmonad is configured in Haskell, and custom
   layout algorithms may be implemented by the user in config files.

   4. http://article.gmane.org/gmane.comp.lang.haskell.general/15131
   5. http://xmonad.org/

   DisTract: Distributed Bug Tracker implemented in Haskell. Matthew
   Sackman [6]announced DisTract, a [7]Distributed Bug Tracker. We're all
   now familiar with working with distributed software control systems,
   such as Monotone, Git, Darcs, Mercurial and others, but bug trackers
   still seem to be fully stuck in the centralised model: Bugzilla and
   Trac both have single centralised servers. This is clearly wrong, as
   if you're able to work on the Train, off the network and still perform
   local commits of code then surely you should also be able to locally
   close bugs too. DisTract allows you to manage bugs in a distributed
   manner through your web-browser. The distribution is achieved by
   making use of a distributed software control system, Monotone. Thus
   Monotone is used to move files across the network, perform merging
   operations and track the development of every bug. Finally, the glue
   in the middle that generates the HTML summaries and modifies the bugs
   is written in Haskell.

   6. http://article.gmane.org/gmane.comp.lang.haskell.cafe/21857
   7. http://www.distract.wellquite.org/

   IOSpec 0.1. Wouter Swierstra [8]announced the first release of the
   [9]Test.IOSpec library, that provides a pure specification of some
   functions in the IO monad. This may be of interest to anyone who wants
   to debug, reason about, analyse, or test impure code. Essentially, by
   importing libraries from IOSpec you can the same code you would
   normally write in the IO monad. Once you're satisfied that your
   functions are reasonably well-behaved, you can remove the Test.IOSpec
   import and replace it with the 'real' functions instead.

   8. http://article.gmane.org/gmane.comp.lang.haskell.general/15134
   9. http://www.cs.nott.ac.uk/~wss/repos/IOSpec

   wl-pprint-1.0: Wadler/Leijen pretty printer. Stefan O'Rear
   [10]announced wl-pprint-1.0, the classic Wadler / Leijen pretty
   printing combinators, now in 100% easier to use [11]Cabalised form!
   PPrint is an implementation of the pretty printing combinators
   described by Philip Wadler (1997). In their bare essence, the
   combinators of Wadler are not expressive enough to describe some
   commonly occurring layouts. The PPrint library adds new primitives to
   describe these layouts and works well in practice.

  10. http://thread.gmane.org/gmane.comp.lang.haskell.general/15112
  11. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/wl-pprint-1.0

   London Haskell User Group. Neil Bartlett [12]announced the first
   meeting of the [13]London Haskell User Group on Wednesday 23rd May
   from 6:30PM. The meeting will be held at City University's main campus
   in central London, and Simon Peyton Jones will be coming to give a
   talk.

  12.