databases in Haskell & type-safety

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
30 messages Options
12
Reply | Threaded
Open this post in threaded view
|

databases in Haskell & type-safety

Gour-3
Hi!

I'd like to use sqlite3 as application storage in my haskell project...

Browsing the available database options in Haskell it seems that:

a) HSQL is dead (hackage reports build-failure with 6.8 & 6.10)

b) haskelldb is also not in a good shape - build fails with 6.8 & 6.10

For Haskell-newbie as myself, it looks that haskelldb is the one which
provide(ed)s the most secure API (I was reading draft paper about
MetaHDBC but, apparently, the type inference support in open-source
databases is poor and that's why, according to the author "This is
unfortunately as it makes MetaHDBC a lot less valuable."

What remains is:

c) Takusen which is also not up-to-date (it fails with 6.10) and

d) HDBC and sqlite bindings which are the only packages which build with
6.10.


However options in d) do not offer, afaik, type-safety which is emblem of
Haskell language, so I wonder how much this could be the problem for
real-world usage?

So, considering that HDBC nicely abstracts API enabling one to easily
switch from e.g. Sqlite3 to Postgres, and it is used as in example for
database programming, it seems as logical (and the only) choice for
Haskell database programming in a real-world?

I'm not familiar with Takusen which says: "Takusen's unique selling
point is safety and efficiency..." and I would appreciate if someone
could shed some more light to its 'safety' and the present status?


Sincerely,
Gour

--

Gour  | Zagreb, Croatia  | GPG key: C6E7162D
----------------------------------------------------------------

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

attachment0 (202 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

Austin Seipp
Excerpts from Gour's message of Sat Jan 03 03:48:44 -0600 2009:

> Hi!
>
> I'd like to use sqlite3 as application storage in my haskell project...
>
> Browsing the available database options in Haskell it seems that:
>
> a) HSQL is dead (hackage reports build-failure with 6.8 & 6.10)
>
> b) haskelldb is also not in a good shape - build fails with 6.8 & 6.10
>
> For Haskell-newbie as myself, it looks that haskelldb is the one which
> provide(ed)s the most secure API (I was reading draft paper about
> MetaHDBC but, apparently, the type inference support in open-source
> databases is poor and that's why, according to the author "This is
> unfortunately as it makes MetaHDBC a lot less valuable."
>
> What remains is:
>
> c) Takusen which is also not up-to-date (it fails with 6.10) and
>
> d) HDBC and sqlite bindings which are the only packages which build with
> 6.10.

Have you tried the simple sqlite3 bindings available?
http://hackage.haskell.org/cgi-bin/hackage-scripts/package/sqlite

> I'm not familiar with Takusen which says: "Takusen's unique selling
> point is safety and efficiency..." and I would appreciate if someone
> could shed some more light to its 'safety' and the present status?

Takusen is based on the (unique) concept of a left-fold
enumerator. Having a left-fold interface guarantees timely (nearly
perfect, really) deallocation of resources while still having the
benefits of a 'lazy' stream. This interface has (as shown by Oleg and
others) proven to be very efficient in a number of cases as well as
favorable for many. The idea is very novel, and truly worth exploring
if you ask me.

For more information about left-fold enumerators and takusen, see here:

http://okmij.org/ftp/papers/LL3-collections-enumerators.txt
http://okmij.org/ftp/Haskell/fold-stream.lhs
http://okmij.org/ftp/Haskell/misc.html#takusen

NB: I have *just* (about 5 minutes ago) sent in a patch for takusen
to get it to build on GHC 6.10.1 to Oleg. Hopefully an updated version
will appear on hackage in the next few days.

Austin
_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

Henning Thielemann-4
In reply to this post by Gour-3
Gour schrieb:
> Hi!
>
> I'd like to use sqlite3 as application storage in my haskell project...
>
> Browsing the available database options in Haskell it seems that:
>
> a) HSQL is dead (hackage reports build-failure with 6.8 & 6.10)

No, it is maintained by [hidden email] . I have also contributed
Oracle/OCI code a half year ago.

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

Gour-3
>>>>> "Henning" == <[hidden email]> writes:

Henning> No, it is maintained by [hidden email] . I have also
Henning> contributed Oracle/OCI code a half year ago.

Oops, I stand corrected...nice to hear.

Still, it would be nice to present some info 'cause web site still shows
1.7 from Dec '05 as the latest release :-(


Sincerely,
Gour

--

Gour  | Zagreb, Croatia  | GPG key: C6E7162D
----------------------------------------------------------------

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

attachment0 (202 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

Gour-3
In reply to this post by Austin Seipp
>>>>> "Austin" == Austin Seipp <[hidden email]> writes:

Austin> Have you tried the simple sqlite3 bindings available?
Austin> http://hackage.haskell.org/cgi-bin/hackage-scripts/package/sqlite

Not (yet), but those are the one I mentioned (besides HDBC) under d) ;)

Austin> Takusen is based on the (unique) concept of a left-fold
Austin> enumerator. Having a left-fold interface guarantees timely
Austin> (nearly perfect, really) deallocation of resources while still
Austin> having the benefits of a 'lazy' stream. This interface has (as
Austin> shown by Oleg and others) proven to be very efficient in a
Austin> number of cases as well as favorable for many. The idea is very
Austin> novel, and truly worth exploring if you ask me.

Thank you very much. I went through the docs for which you provided some
references - I cannot claim I understood everything, but it sounds/looks
quite interesting and worth exploring.

Is there any simple tutorial about using Takusen available somewhere?

Austin> NB: I have *just* (about 5 minutes ago) sent in a patch for
Austin> takusen to get it to build on GHC 6.10.1 to Oleg. Hopefully an
Austin> updated version will appear on hackage in the next few days.

Great news!


Sincerely,
Gour

--

Gour  | Zagreb, Croatia  | GPG key: C6E7162D
----------------------------------------------------------------

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

attachment0 (202 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

brian-245
In reply to this post by Austin Seipp
On Sat, Jan 3, 2009 at 4:25 AM, Austin Seipp <[hidden email]> wrote:
> NB: I have *just* (about 5 minutes ago) sent in a patch for takusen
> to get it to build on GHC 6.10.1 to Oleg. Hopefully an updated version
> will appear on hackage in the next few days.

Yay! Thanks. I've been waiting.
_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

John Goerzen-3
In reply to this post by Gour-3
On Sat, Jan 03, 2009 at 10:48:44AM +0100, Gour wrote:

> So, considering that HDBC nicely abstracts API enabling one to easily
> switch from e.g. Sqlite3 to Postgres, and it is used as in example for
> database programming, it seems as logical (and the only) choice for
> Haskell database programming in a real-world?

Sorry to come to this late, but I figured I'd jump in a bit, as
someone that uses HDBC in the real world.

I would say that database interactions are typically limited to a
small part of code.  In small programs, I generally have a DB module
that does the queries, and marshals everything to/from the rich
Haskell types I define.  Any possible type issues are thus constrained
to that small part of code.

HDBC is a low-level abstraction, which can be used on its own or, of
course, as a layer underlying HaskellDB or some such.  I do not
dispute the use of tools such as HaskellDB or others that try to
automate the business of representing a database's schema -- and
queries against it -- using a language's type system.  There are a lot
of these systems in a lot of languages.  I've used some of them.

And, almost universally, they annoy me.  I find it takes longer to
write code with them than without, and often they have issues
representing some query that I know I can do easily in SQL but maybe
can't as easy in the toolkit.  As an example, when I last looked at
HaskellDB in 2005, I found that it was impossible to do a SELECT
without a DISTINCT [1].  There are many situations where such a thing
is necessary, so I had to discard it for my projects.

HDBC is more similar to Perl's DBI or Python's DB-API (or perhaps a
sane version of JDBC).  It is a standard interface to SQL RDBMS
engines that provides some tools for marshaling data back and forth,
but generally leaves you to construct the queries.  It does not really
solve the same problem as HaskellDB.

I wrote HDBC because of some issues with HSQL.  I had trouble with
segfaults, referencing returned data by column number instead of name,
and it did not support replacable parameters.  HDBC supports all of
that, and as a result, does not provide any functions to escape data
for a SQL engine because its design renders such functions
unnecessary.  I have not followed HSQL development since.

So, this was not intended as an HDBC commercial, just more of a
braindump as to why I wrote it.  Hope it helps.

HDBC is actively used in mission-critical applications where I work.
We use both the PostgreSQL and ODBC backends in production.  We even
use the ODBC backend along with the particularly nefarious ODBC
interface for the Progress 4GL database.  I use the Sqlite3 backend
quite a bit in my own personal projects, such as hpodder and twidge.

> I'm not familiar with Takusen which says: "Takusen's unique selling
> point is safety and efficiency..." and I would appreciate if someone
> could shed some more light to its 'safety' and the present status?

[1] http://www.haskell.org/pipermail/haskell-cafe/2005-August/011026.html

-- John
_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

Gour-3
>>>>> "John" == John Goerzen <[hidden email]> writes:

Hello John,

John> I would say that database interactions are typically limited to a
John> small part of code.  In small programs, I generally have a DB
John> module that does the queries, and marshals everything to/from the
John> rich Haskell types I define.  Any possible type issues are thus
John> constrained to that small part of code.

That's right. However, I envision application for which a significant
part would require querying (kind of research base for querying common
stuff in thousands of records.)

John> HDBC is a low-level abstraction, which can be used on its own or,
John> of course, as a layer underlying HaskellDB or some such.  I do not
John> dispute the use of tools such as HaskellDB or others that try to
John> automate the business of representing a database's schema -- and
John> queries against it -- using a language's type system.  There are a
John> lot of these systems in a lot of languages.  I've used some of
John> them.

Have you maybe tried Takusen (HaskellDB which you reference above does
not seem very much alive)?

John> And, almost universally, they annoy me.  I find it takes longer to
John> write code with them than without, and often they have issues
John> representing some query that I know I can do easily in SQL but
John> maybe can't as easy in the toolkit.  As an example, when I last
John> looked at HaskellDB in 2005, I found that it was impossible to do
John> a SELECT without a DISTINCT [1].  There are many situations where
John> such a thing is necessary, so I had to discard it for my projects.

Hmm, that's interesting to hear...I'm curious what could be reply from
Takusen devs...

John> HDBC is more similar to Perl's DBI or Python's DB-API (or perhaps
John> a sane version of JDBC).  It is a standard interface to SQL RDBMS
John> engines that provides some tools for marshaling data back and
John> forth, but generally leaves you to construct the queries.

Well, that's not too bad...

John> So, this was not intended as an HDBC commercial, just more of a
John> braindump as to why I wrote it.  Hope it helps.

Sure, it helps. Thanks a lot for your input.

Otoh, I believe that, considering it is mentioned in RWH, HDBC does not
need much commercial, just contrary, you can expect new feature requests
From the new army of Haskell developers cultivated by the book :-)

I'll e.g. open ticket for BLOB support :-D

John> HDBC is actively used in mission-critical applications where I
John> work.  We use both the PostgreSQL and ODBC backends in production.
John> We even use the ODBC backend along with the particularly nefarious
John> ODBC interface for the Progress 4GL database.  I use the Sqlite3
John> backend quite a bit in my own personal projects, such as hpodder
John> and twidge.

Database abstraction offered by HDBC is very nice feature allowing one
to change back-end driver without too much hassle, so I'll try to
investigate a bit about possible BLOB support on HDBC-level.

It's definitely something used in real-world databases...


Sincerely,
Gour

--

Gour  | Zagreb, Croatia  | GPG key: C6E7162D
----------------------------------------------------------------

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

attachment0 (202 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Re: databases in Haskell & type-safety

John Goerzen-3
Gour wrote:

> John> HDBC is a low-level abstraction, which can be used on its own or,
> John> of course, as a layer underlying HaskellDB or some such.  I do not
> John> dispute the use of tools such as HaskellDB or others that try to
> John> automate the business of representing a database's schema -- and
> John> queries against it -- using a language's type system.  There are a
> John> lot of these systems in a lot of languages.  I've used some of
> John> them.
>
> Have you maybe tried Takusen (HaskellDB which you reference above does
> not seem very much alive)?

No, I haven't, unfortunately.

> Otoh, I believe that, considering it is mentioned in RWH, HDBC does not
> need much commercial, just contrary, you can expect new feature requests
> From the new army of Haskell developers cultivated by the book :-)

That's great.  Even better if accompanied by a patch ;-)

> I'll e.g. open ticket for BLOB support :-D

Of course :-)

> Database abstraction offered by HDBC is very nice feature allowing one
> to change back-end driver without too much hassle, so I'll try to
> investigate a bit about possible BLOB support on HDBC-level.

That would be wonderful.

> It's definitely something used in real-world databases...

Yes, I'm quite aware of that.  Just not *my* particular ones ;-)

-- John
_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

Maurí­cio
In reply to this post by Gour-3
> However options in d) do not offer, afaik, type-safety which is emblem of
> Haskell language, so I wonder how much this could be the problem for
> real-world usage?

I've been doing a lot of low level sqlite3 lately (it's going to
be on a hackage package as soon as I finish my current work). As
long as I clearly isolate and test the marshalling of my data to SQL
and back, my (personal, probably different from yours) experience using
just sqlite3_exec has never got me into trouble.

Best,
Maurício

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

Johannes Waldmann
In reply to this post by Gour-3
[on hsql]

> Still, it would be nice to present some info 'cause web site still shows
> 1.7 from Dec '05 as the latest release

see http://article.gmane.org/gmane.comp.lang.haskell.libraries/10490

J.W.


_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

Gour-3
In reply to this post by John Goerzen-3
>>>>> "John" == John Goerzen <[hidden email]> writes:

John> That's great.  Even better if accompanied by a patch ;-)

Heh, one of the things which prevents me advancing with my own Haskell
project is lack of enough skills to provide bindings for one C-lib and
here I see the same pattern...It looks I have to cross it over :-)

>> I'll e.g. open ticket for BLOB support :-D

John> Of course :-)

I did it - have you seen the notice about problems with HDBC-forums?

John> Yes, I'm quite aware of that.  Just not *my* particular ones ;-)

OK. I'll try to, at least, come with some concrete proposal...


Sincerely,
Gour

--

Gour  | Zagreb, Croatia  | GPG key: C6E7162D
----------------------------------------------------------------

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

attachment0 (202 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

Gour-3
In reply to this post by Maurí­cio
>>>>> "Mauricio" == Mauricio  <[hidden email]> writes:

Mauricio> I've been doing a lot of low level sqlite3 lately (it's going
Mauricio> to be on a hackage package as soon as I finish my current
Mauricio> work).

Have you done any work with BLOBs?

Mauricio> As long as I clearly isolate and test the marshalling of my
Mauricio> data to SQL and back, my (personal, probably different from
Mauricio> yours) experience using just sqlite3_exec has never got me
Mauricio> into trouble.

Thank you for your input.


Sincerely,
Gour

--

Gour  | Zagreb, Croatia  | GPG key: C6E7162D
----------------------------------------------------------------

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

attachment0 (202 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Re: databases in Haskell & type-safety

John Goerzen-3
In reply to this post by Gour-3
Gour wrote:

>>>>>> "John" == John Goerzen <[hidden email]> writes:
>
> John> That's great.  Even better if accompanied by a patch ;-)
>
> Heh, one of the things which prevents me advancing with my own Haskell
> project is lack of enough skills to provide bindings for one C-lib and
> here I see the same pattern...It looks I have to cross it over :-)
>
>>> I'll e.g. open ticket for BLOB support :-D
>
> John> Of course :-)
>
> I did it - have you seen the notice about problems with HDBC-forums?

Yes.  I am thoroughly displeased with Ruby on Rails at the moment.  It
is less maintainable than a network of DOS boxes.  There are a host of
mysterious crashes in Redmine at the moment -- including one where
pulling up the page for one specific bug (but none others) crashes the
server.

I could upgrade Redmine, but that requires a Ruby stack that is partly
newer than what's in Debian, and the upgrade for that process appears to
succeed, but then fails in mysterious ways at the end.

To anyone annoyed with Haskell's library install process: you have no
idea how good you have it unless you've tried Ruby and rails.

-- John

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

Maurí­cio
In reply to this post by Gour-3
> Mauricio> I've been doing a lot of low level sqlite3 lately (it's going
> Mauricio> to be on a hackage package as soon as I finish my current
> Mauricio> work).
>
> Have you done any work with BLOBs?
>

No. Only sqlite3_exec with INSERT, SELECT stuff,
and saving everything that needs structure in
pseudo-xml strings. Not that efficient, but easy
to change to blobs when everything is ready and
tested.

Maurício

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

Gour-3
In reply to this post by John Goerzen-3
>>>>> "John" == John Goerzen <[hidden email]> writes:

John> Yes.  I am thoroughly displeased with Ruby on Rails at the moment.
John> It is less maintainable than a network of DOS boxes.  There are a
John> host of mysterious crashes in Redmine at the moment -- including
John> one where pulling up the page for one specific bug (but none
John> others) crashes the server.

I liked the look of Redmine when trying it out, but after installing
RoR, I quickly forgot it and put Roundup on one server.

Now, while still waiting if something will come out of DarcForge, I'll
use LP.

John> To anyone annoyed with Haskell's library install process: you have
John> no idea how good you have it unless you've tried Ruby and rails.

I can understand you hoping you will find a better solution in the
future.


Sincerely,
Gour

--

Gour  | Zagreb, Croatia  | GPG key: C6E7162D
----------------------------------------------------------------

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

attachment0 (202 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

Gour-3
In reply to this post by Johannes Waldmann
>>>>> "Johannes" == Johannes Waldmann <[hidden email]> writes:

Johannes> see
Johannes> http://article.gmane.org/gmane.comp.lang.haskell.libraries/10490

Thanks.

Is it just a 'fix' or HSQL will be properly maintained as well?


Sincerely,
Gour

--

Gour  | Zagreb, Croatia  | GPG key: C6E7162D
----------------------------------------------------------------

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

attachment0 (202 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

Gour-3
In reply to this post by Maurí­cio
>>>>> "Mauricio" == Mauricio  <[hidden email]> writes:

Mauricio> No. Only sqlite3_exec with INSERT, SELECT stuff,
Mauricio> and saving everything that needs structure in pseudo-xml
Mauricio> strings. Not that efficient, but easy to change to blobs when
Mauricio> everything is ready and tested.

I see...I'm thinking to maybe store only paths for bigger BLOBs, but
still there is need to store smaller (thumbnails pics) ones...


Sincerely,
Gour

--

Gour  | Zagreb, Croatia  | GPG key: C6E7162D
----------------------------------------------------------------

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

attachment0 (202 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: databases in Haskell & type-safety

Johannes Waldmann
In reply to this post by Gour-3

> Johannes> http://article.gmane.org/gmane.comp.lang.haskell.libraries/10490

> Is it just a 'fix' or HSQL will be properly maintained as well?

Just a fix for Setup.hs and *.cabal, and no changes to the real code
(w.r.t. version -1.7 presently available from hackage)

J.W.




_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe
Reply | Threaded
Open this post in threaded view
|

Re: Re: databases in Haskell & type-safety

Jan-34
In reply to this post by John Goerzen-3
* John Goerzen <[hidden email]> [2009-01-13 12:37:45 -0600]:

> Gour wrote:
> >>>>>> "John" == John Goerzen <[hidden email]> writes:
> >
> > John> That's great.  Even better if accompanied by a patch ;-)
> >
> > Heh, one of the things which prevents me advancing with my own Haskell
> > project is lack of enough skills to provide bindings for one C-lib and
> > here I see the same pattern...It looks I have to cross it over :-)
> >
> >>> I'll e.g. open ticket for BLOB support :-D
> >
> > John> Of course :-)
> >
> > I did it - have you seen the notice about problems with HDBC-forums?
>
> Yes.  I am thoroughly displeased with Ruby on Rails at the moment.  It
> is less maintainable than a network of DOS boxes.  There are a host of
> mysterious crashes in Redmine at the moment -- including one where
> pulling up the page for one specific bug (but none others) crashes the
> server.
>
> I could upgrade Redmine, but that requires a Ruby stack that is partly
> newer than what's in Debian, and the upgrade for that process appears to
> succeed, but then fails in mysterious ways at the end.
Redmine requires only ruby 1.8.6 and rails 2.1.2, which are both stable
releases, so I think an upgrade of your ruby stack is very reasonable.

>
> To anyone annoyed with Haskell's library install process: you have no
> idea how good you have it unless you've tried Ruby and rails.

Disagree. Rubygems is fairly easy to use. At lease, I can guess how to
uninstall a package by trying 'gem uninstall foobar', but failed by
trying 'cabal uninstall/remove foobar' :-)

Jan

>
> -- John
>
> _______________________________________________
> Haskell-Cafe mailing list
> [hidden email]
> http://www.haskell.org/mailman/listinfo/haskell-cafe

--
jan=callcc{|jan|jan};jan.call(jan)

_______________________________________________
Haskell-Cafe mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe

attachment0 (500 bytes) Download Attachment
12