Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-02 Thread Jason Dagit
On Sun, Aug 1, 2010 at 11:44 AM, aditya siram aditya.si...@gmail.comwrote:

 Why are the Takusen module links on Hackage dead? I would also like to take
 this opportunity to request a Takusen tutorial and to thank you for this
 innovative library.


http://blog.codersbase.com/2010/08/takusen-tutorial-part-1-hello-takusen.html

There you go for a starter tutorial.  For some reason the formatting on the
published page is quite different compared with the interactive editor, and
I got sick of fighting with it.  I hope you can still read it well enough to
get something out of it.  Feed back welcome!  I hope to write more in that
series.  Do you have any suggestions for a simple database application I
could develop in the tutorial series?

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


Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-02 Thread Yitzchak Gale
Alistair Bayley wrote:
 We've put some effort into supporting older versions of ghc...
 Are there any distros still shipping with ghc-6.6?

There are so many distros out there that it is hard to say no. But
Debian, which tends to be very conservative, has not had
a supported version with GHC 6.6 since February 2010.

Jason Dagit wrote:
 ...darcs ...to drop support for a version of GHC ...If
 debian stable is still covered after the proposed changes
 then they are accepted automatically. If Debian stable
 would not be covered, then there is a discussion to reach
 consensus.

There seems to be considerably more tension on the Darcs
team between using new GHC features and supporting older
GHC versions. Even hanging on to 6.8 support has been very
painful for them.

Like Darcs, Takusen is fundamental infrastructure. An effort
should be made to support the oldest version of GHC still in
common production use. Ideally that would mean supporting
the version of GHC in Debian old-stable until at least a few
months after Debian has stopped supporting it. According to
that criterion, now is just about the right time to drop support
for GHC 6.6.

That said, people on platforms that old will probably not be
needing the shiniest new features of Takusen, only the bug
fixes.

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


Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-02 Thread Yitzchak Gale
Jason Dagit wrote:
 There you go for a starter tutorial.

Thanks Jason, that's a great start. It already goes a long way
towards making Takusen more accessible.

I noticed that QuickCheck is still a dependency. That's
not a good idea. It creates a lot of dependency problems,
and most of the time the tests aren't needed anyway.

It would also be nice if the various backends could be
broken out into separate packages too, like for the other database
packages. But I understand that might be a bit more work.

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


Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-02 Thread Jason Dagit
On Mon, Aug 2, 2010 at 5:48 AM, Yitzchak Gale g...@sefer.org wrote:

 Jason Dagit wrote:
  There you go for a starter tutorial.

 Thanks Jason, that's a great start. It already goes a long way
 towards making Takusen more accessible.

 I noticed that QuickCheck is still a dependency. That's
 not a good idea. It creates a lot of dependency problems,
 and most of the time the tests aren't needed anyway.


You're right.  I may have been able to avoid it by disabling the tests when
I installed it.  I'll have to look at it more.



 It would also be nice if the various backends could be
 broken out into separate packages too, like for the other database
 packages. But I understand that might be a bit more work.


This is a definite goal!

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


Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-01 Thread David Anderson
Congrats on the release.

Just one humble suggestion: your email assumes that the reader already
knows what Takusen is. Reading the email, all I can infer is that it
has something to do with databases, because of the ODBC reference. The
only link in the email also does nothing to explain, since it just
links to a ball of code. The README there also assumes that I already
know that I want Takusen, and so doesn't bother to explain what it
does, only how to use it.

Ideally, release announcements should always include a 1-sentence
executive summary of what the project is, before heading on to what is
new. Say, The Takusen team would like to announce the latest release
of Takusen, 0.8.6. Takusen is insert description here, 'cos I'm still
not quite sure. This is primarily a bugfix release...

- Dave

On Sat, Jul 31, 2010 at 8:10 PM, Jason Dagit da...@codersbase.com wrote:
 Hello,
 The Takusen team would like to announce the latest release of Takusen,
 0.8.6.  This is primarily a bug fix and test suite enhancement
 release.  The most notable new feature is limited support for string
 encodings with ODBC.  The full list of changes is included at the
 at the end of this announcement.
 = Interested in Takusen development? =
 Takusen is looking for a new long term maintainer.  I have agreed to
 fill the role of maintainer for now, but we are seeking an
 enthusiastic individual with spare time and a desire to lead Takusen
 development.
 = How to get it =
 This release is available on hackage:
   cabal update  cabal install Takusen
 The source code is available on code.haskell.org:
   darcs get http://code.haskell.org/takusen

 = New features =
 - Alistair Bayley:
   * Database/PostgreSQL/PGFunctions.lhs: show instance for UUID prints
     Word64s in hex.
   * Database/PostgreSQL/Enumerator.lhs: add UUID and marshaling
     functions.
   * Database/PostgreSQL/PGFunctions.lhs: add UUID and marshalling
     functions.
   * Database/ODBC/OdbcFunctions.hsc: add support for different String
     encodings. New functions to marshal to/from various encodings
     (Latin1, UTF8, UTF16), and bind/get functions changed to use
     these.
 - Daniel Corson
   * binary data with postgres
 = Bug fixes =
 - Alistair Bayley:
   * Database/ODBC/OdbcFunctions.hsc: fix bug in
     mkBindBufferForStorable for Nothing (null) case: pass -1
     (sqlNullData) as value size.
   * Database/ODBC/OdbcFunctions.hsc: use sqlNullData in
     bindParamString Nothing case, rather than -1. A bit more
     descriptive.
   * Database/ODBC/Enumerator.lhs: store bind buffers in stmt object,
     so we retain reference to them for lifetime of statement. Destroy
     with statement (well, lose the reference). Should fix bind errors
     found by Jason Dagit.
   * Database/ODBC/Enumerator.lhs: Oracle only supports two transaction
     isolation levels (like Postgres). String output bind parameters
     have max size 8000 (we use 7999 because module OdbcFunctions adds
     one to the size).
   * Database/ODBC/OdbcFunctions.hsc: string parameters have different
     SQL data types when binding columns (SQL_CHAR) and parameters
     (SQL_VARCHAR). Oracle only supports two transaction isolation
     levels.
   * Database/PostgreSQL/PGFunctions.lhs: fix byteaUnesc and add
     byteaEsc.

 = Refactoring =
 - Jason Dagit:
   * update urls in cabal file
 - Alistair Bayley:
   * Takusen.cabal: fixed QuickCheck version spec.
   * Takusen.cabal: bump version to 0.8.6.
   * Database/ODBC/OdbcFunctions.hsc: makeUtcTimeBuffer: pass struct
     size as both buffer size and data size in call to mkBindBuffer.
   * Database/ODBC/OdbcFunctions.hsc: mkBindBufferForStorable calls
     mkBindBuffer (reduces duplicated code).
   * Database/ODBC/Enumerator.lhs: add instance for EnvInquiry to
     change session char encoding.
   * Database/ODBC/Enumerator.lhs: add comments to beginTransaction.
   * Database/Util.lhs: print printArrayContents, to match function
     name.
   * Database/PostgreSQL/Enumerator.lhs: expose byteaEsc and
     byteaUnesc.
 = New tests and changes to tests =
 - Alistair Bayley:
   * Database/ODBC/Test/OdbcFunctions.lhs: added testBindDouble to test
     Nothing (null) case for Storable types.
   * Database/ODBC/Test/OdbcFunctions.lhs: split transaction isolation
     level tests so there is one test per level. String marshaling
     tests use 0x10FF40 as max unicode codepoint, because that keeps
     Oracle happy. Max size for String parameter buffer is 7999 (SQL
     Server restriction). Don't bury errors raised by tests; print, but
     continue. Fix fixture cleanup bug in testBindOutput (dropped wrong
     procedure).
   * Database/ODBC/Test/Enumerator.lhs: suffix xxx to bindOutput test
     expected value.
   * Database/PostgreSQL/Test/PGFunctions.lhs: tests for UUID.
   * Database/PostgreSQL/Test/Enumerator.lhs: round-trip test for UUID.
   * Database/PostgreSQL/Test/PGFunctions.lhs: test select of UUID
     value.
   * 

Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-01 Thread Jason Dagit
On Sun, Aug 1, 2010 at 9:10 AM, David Anderson d...@natulte.net wrote:

 Congrats on the release.

 Just one humble suggestion: your email assumes that the reader already
 knows what Takusen is. Reading the email, all I can infer is that it
 has something to do with databases, because of the ODBC reference. The
 only link in the email also does nothing to explain, since it just
 links to a ball of code. The README there also assumes that I already
 know that I want Takusen, and so doesn't bother to explain what it
 does, only how to use it.

Sorry about that.  The description from hackage:
http://hackage.haskell.org/package/Takusen

Takusen: Database library with left-fold interface, for PostgreSQL, Oracle,
SQLite, ODBC.

Takusen is a DBMS access library. Like HSQL and HDBC, we support arbitrary
SQL statements (currently strings, extensible to anything that can be
converted to a string).

Takusen's unique selling point is safety and efficiency. We statically
ensure all acquired database resources - such as cursors, connections, and
statement handles - are released, exactly once, at predictable times.
Takusen can avoid loading the whole result set in memory, and so can handle
queries returning millions of rows in constant space. Takusen also supports
automatic marshalling and unmarshalling of results and query parameters.
These benefits come from the design of query result processing around a
left-fold enumerator.

Currently we fully support ODBC, Oracle, Sqlite, and PostgreSQL.



 Ideally, release announcements should always include a 1-sentence
 executive summary of what the project is, before heading on to what is
 new. Say, The Takusen team would like to announce the latest release
 of Takusen, 0.8.6. Takusen is insert description here, 'cos I'm still
 not quite sure. This is primarily a bugfix release...


Thanks, I'll remember that.

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


Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-01 Thread aditya siram
Why are the Takusen module links on Hackage dead? I would also like to take
this opportunity to request a Takusen tutorial and to thank you for this
innovative library.
-deech

On Sun, Aug 1, 2010 at 12:59 PM, Jason Dagit da...@codersbase.com wrote:



 On Sun, Aug 1, 2010 at 9:10 AM, David Anderson d...@natulte.net wrote:
 
  Congrats on the release.
 
  Just one humble suggestion: your email assumes that the reader already
  knows what Takusen is. Reading the email, all I can infer is that it
  has something to do with databases, because of the ODBC reference. The
  only link in the email also does nothing to explain, since it just
  links to a ball of code. The README there also assumes that I already
  know that I want Takusen, and so doesn't bother to explain what it
  does, only how to use it.

 Sorry about that.  The description from hackage:
 http://hackage.haskell.org/package/Takusen

 Takusen: Database library with left-fold interface, for PostgreSQL, Oracle,
 SQLite, ODBC.

 Takusen is a DBMS access library. Like HSQL and HDBC, we support arbitrary
 SQL statements (currently strings, extensible to anything that can be
 converted to a string).

 Takusen's unique selling point is safety and efficiency. We statically
 ensure all acquired database resources - such as cursors, connections, and
 statement handles - are released, exactly once, at predictable times.
 Takusen can avoid loading the whole result set in memory, and so can handle
 queries returning millions of rows in constant space. Takusen also supports
 automatic marshalling and unmarshalling of results and query parameters.
 These benefits come from the design of query result processing around a
 left-fold enumerator.

 Currently we fully support ODBC, Oracle, Sqlite, and PostgreSQL.



 Ideally, release announcements should always include a 1-sentence
 executive summary of what the project is, before heading on to what is
 new. Say, The Takusen team would like to announce the latest release
 of Takusen, 0.8.6. Takusen is insert description here, 'cos I'm still
 not quite sure. This is primarily a bugfix release...


 Thanks, I'll remember that.

 Jason

 ___
 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] ANNOUNCE: Takusen 0.8.6

2010-08-01 Thread Don Stewart

aditya.siram:
 Why are the Takusen module links on Hackage dead?

Hmm.  The links look fine:

http://hackage.haskell.org/package/Takusen-0.8.6

 this opportunity to request a Takusen tutorial and to thank you for this


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


Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-01 Thread aditya siram
I meant the links to the API docs.
-deech

[1]
http://hackage.haskell.org/packages/archive/Takusen/0.8.6/doc/html/Database-ODBC-Enumerator.html

On Sun, Aug 1, 2010 at 1:46 PM, Don Stewart d...@galois.com wrote:


 aditya.siram:
  Why are the Takusen module links on Hackage dead?

 Hmm.  The links look fine:

http://hackage.haskell.org/package/Takusen-0.8.6

  this opportunity to request a Takusen tutorial and to thank you for this



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


Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-01 Thread austin seipp
A reasonable guess (I think, anyway): the reason is because support
for ODBC, Oracle, Postgres etc isn't compiled in by default. You have
to specify it with a flag with cabal install to get support for those
things. But the reason they show up in API docs I would guess is
because Haddock doesn't check constraints on what modules are
'exposed' given certain flags in the cabal file, it just looks over
every 'exposed' module no matter what.

In this case, it's not really a huge burden because I believe those
modules each have almost identical interfaces, in particular they
specify a 'connect' like function to get a database handle, and that's
about all. The rest is common code under Database.Enumerator.

On Sun, Aug 1, 2010 at 1:49 PM, aditya siram aditya.si...@gmail.com wrote:
 I meant the links to the API docs.
 -deech

 [1]
 http://hackage.haskell.org/packages/archive/Takusen/0.8.6/doc/html/Database-ODBC-Enumerator.html

 On Sun, Aug 1, 2010 at 1:46 PM, Don Stewart d...@galois.com wrote:

 aditya.siram:
  Why are the Takusen module links on Hackage dead?

 Hmm.  The links look fine:

    http://hackage.haskell.org/package/Takusen-0.8.6

  this opportunity to request a Takusen tutorial and to thank you for this




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





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


Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-01 Thread Don Stewart
I think it is just the ODBC backend that didn't generate


http://hackage.haskell.org/packages/archive/Takusen/0.8.6/doc/html/Database-Enumerator.html

Likely because the required C libs are not on
Hackage, so that backend wasn't built.

aditya.siram:
 I meant the links to the API docs.
 -deech
 
 [1] http://hackage.haskell.org/packages/archive/Takusen/0.8.6/doc/html/
 Database-ODBC-Enumerator.html
 
 On Sun, Aug 1, 2010 at 1:46 PM, Don Stewart d...@galois.com wrote:
 
 
 aditya.siram:
  Why are the Takusen module links on Hackage dead?
 
 Hmm.  The links look fine:
 
http://hackage.haskell.org/package/Takusen-0.8.6
 
  this opportunity to request a Takusen tutorial and to thank you for this
 
 
 
 
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-01 Thread austin seipp
Hi Jason,

I've had my eye on the 'Takusen' approach for a while. In particular I
think it's a wonderful idea to use the left-fold based interface.
Takusen is also well supported and pretty stable, having been around
for a while.

Despite this, it seems to have a couple faults:
 * Few tutorials, aside from the Haddocks in Database.Enumerator
 * Very crufty old code in some sports (I see lots of references to
GHC 6.6 and the 'extensible exceptions' changes in the cabal file
among other places, which I believe we're all well beyond now. There
also seems to be random tidbits that could be removed in favor of a
library/removed because they're not necessary.) This should IMO all be
removed under the argument Get a more recent GHC although people may
disagree here.
 * It would be nice if we could make it depend on nicer libraries
instead of rolling its own stuff - for example, we have Lato's
excellent iteratee package, and Bas van Dijk has written a (IMO
woefully underappreciated!) 'regions' package with encapsulate the
lightweight monadic regions idea Oleg proposed. Of course, due to
design, neither of these may work properly for Takusen's case, and if
they did they would very likely facilitate API changes, but it's
something I've been thinking about in the name of making the library
smaller and more lightweight.

These things were somewhat motivating me to perhaps write a small
competitor library, but if Takusen is looking for a maintainer, it may
certainly be more productive to remove some of the old cruft and
modernize a bit of the existing code.

Does anybody else have similar feelings? I am somewhat busy, but if
someone else has some spare time to dedicate with me - either to
coding or simply brainstorming right now - perhaps we could transform
Takusen into a much more lightweight, better documented library. If it
comes down to this I think I might be willing to maintain it, but I'd
like feedback before just going out and wildly making changes to a
venerable library like this.

On Sat, Jul 31, 2010 at 1:10 PM, Jason Dagit da...@codersbase.com wrote:
 Hello,
 The Takusen team would like to announce the latest release of Takusen,
 0.8.6.  This is primarily a bug fix and test suite enhancement
 release.  The most notable new feature is limited support for string
 encodings with ODBC.  The full list of changes is included at the
 at the end of this announcement.
 = Interested in Takusen development? =
 Takusen is looking for a new long term maintainer.  I have agreed to
 fill the role of maintainer for now, but we are seeking an
 enthusiastic individual with spare time and a desire to lead Takusen
 development.
 = How to get it =
 This release is available on hackage:
   cabal update  cabal install Takusen
 The source code is available on code.haskell.org:
   darcs get http://code.haskell.org/takusen

 = New features =
 - Alistair Bayley:
   * Database/PostgreSQL/PGFunctions.lhs: show instance for UUID prints
     Word64s in hex.
   * Database/PostgreSQL/Enumerator.lhs: add UUID and marshaling
     functions.
   * Database/PostgreSQL/PGFunctions.lhs: add UUID and marshalling
     functions.
   * Database/ODBC/OdbcFunctions.hsc: add support for different String
     encodings. New functions to marshal to/from various encodings
     (Latin1, UTF8, UTF16), and bind/get functions changed to use
     these.
 - Daniel Corson
   * binary data with postgres
 = Bug fixes =
 - Alistair Bayley:
   * Database/ODBC/OdbcFunctions.hsc: fix bug in
     mkBindBufferForStorable for Nothing (null) case: pass -1
     (sqlNullData) as value size.
   * Database/ODBC/OdbcFunctions.hsc: use sqlNullData in
     bindParamString Nothing case, rather than -1. A bit more
     descriptive.
   * Database/ODBC/Enumerator.lhs: store bind buffers in stmt object,
     so we retain reference to them for lifetime of statement. Destroy
     with statement (well, lose the reference). Should fix bind errors
     found by Jason Dagit.
   * Database/ODBC/Enumerator.lhs: Oracle only supports two transaction
     isolation levels (like Postgres). String output bind parameters
     have max size 8000 (we use 7999 because module OdbcFunctions adds
     one to the size).
   * Database/ODBC/OdbcFunctions.hsc: string parameters have different
     SQL data types when binding columns (SQL_CHAR) and parameters
     (SQL_VARCHAR). Oracle only supports two transaction isolation
     levels.
   * Database/PostgreSQL/PGFunctions.lhs: fix byteaUnesc and add
     byteaEsc.

 = Refactoring =
 - Jason Dagit:
   * update urls in cabal file
 - Alistair Bayley:
   * Takusen.cabal: fixed QuickCheck version spec.
   * Takusen.cabal: bump version to 0.8.6.
   * Database/ODBC/OdbcFunctions.hsc: makeUtcTimeBuffer: pass struct
     size as both buffer size and data size in call to mkBindBuffer.
   * Database/ODBC/OdbcFunctions.hsc: mkBindBufferForStorable calls
     mkBindBuffer (reduces duplicated code).
   * Database/ODBC/Enumerator.lhs: add instance for EnvInquiry to
     

Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-01 Thread Gregory Crosswhite

 On 8/1/10 12:12 PM, austin seipp wrote:

Hi Jason,

I've had my eye on the 'Takusen' approach for a while. In particular I
think it's a wonderful idea to use the left-fold based interface.
Takusen is also well supported and pretty stable, having been around
for a while.



I agree;  in fact, I use it for all of my database needs.


  * It would be nice if we could make it depend on nicer libraries
instead of rolling its own stuff - for example, we have Lato's
excellent iteratee package, and Bas van Dijk has written a (IMO
woefully underappreciated!) 'regions' package with encapsulate the
lightweight monadic regions idea Oleg proposed. Of course, due to
design, neither of these may work properly for Takusen's case, and if
they did they would very likely facilitate API changes, but it's
something I've been thinking about in the name of making the library
smaller and more lightweight.


Making the library depend on more external libraries will actually make 
it more heavyweight since it will require the user to install more 
libraries just in order to use Takusen.  I'm not saying that this is a 
bad thing, but I wouldn't automatically count it as a disadvantage that 
one can install Takusen without requiring lots of other libraries to be 
installed first.


It looks to me like the iteratee package wouldn't be a good fit for 
Takusen because (as far I understand it) it is designed for the use case 
of reading raw data where in particular the chunks might not be 
aligned with the records being processed, whereas Takusen is designed 
for reading in very structured data.  The regions package might work, 
although there are problems with the way that it handles exceptions that 
has been discussed previously on this list.


Finally, a disadvantage of changing Takusen to use these kinds of 
external libraries is that it could actually make it *harder* to 
understand how to use it, since first the user would have to understand 
the concepts involved in the external libraries.


Again, I'm not saying that any of these issues automatically make it a 
bad idea to modify Takusen to use external libraries, just that the 
current approach works well and is (in my opinion) already relatively 
simple and straightforward, and it would be unfortunate if this were 
lost without a clear benefit.


Cheers,
Greg

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


Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-01 Thread Alistair Bayley
At the risk of seeming a bit defensive, I'll respond to some of these points...

 Despite this, it seems to have a couple faults:
  * Few tutorials, aside from the Haddocks in Database.Enumerator

True. I put a bit of effort in to writing the docs in
Database.Enumerator as a sort of tutorial, but it doesn't work as well
as a properly written tutorial. Perhaps this would be better placed on
the wiki, but it's quite a bit of work, assuming you would prefer
something more than a simple cut-n-paste from the generated docs.


  * Very crufty old code in some spots (I see lots of references to
 GHC 6.6 and the 'extensible exceptions' changes in the cabal file
 among other places, which I believe we're all well beyond now. There
 also seems to be random tidbits that could be removed in favor of a
 library/removed because they're not necessary.) This should IMO all be
 removed under the argument Get a more recent GHC although people may
 disagree here.

Maybe... We've put some effort into supporting older versions of ghc,
mainly because quite a few distributions have quite long update
cycles. If you're stuck in an environment (some unis, some employers?)
where you are only allowed tools from the last stable distribution,
you may well be many releases behind current ghc. If everyone agrees
that 6.8 should be the oldest ghc we should test and support, then
that does make things a little simpler. Are there any distros still
shipping with ghc-6.6?

BTW, I thought extensible-exceptions first shipped with 6.10. I don't
think everyone is off 6.8 yet, so we'd want to keep that cabal switch
in for a little longer if we intend to support 6.8.


  * It would be nice if we could make it depend on nicer libraries
 instead of rolling its own stuff - for example, we have Lato's
 excellent iteratee package, and Bas van Dijk has written a (IMO
 woefully underappreciated!) 'regions' package with encapsulate the
 lightweight monadic regions idea Oleg proposed. Of course, due to
 design, neither of these may work properly for Takusen's case, and if
 they did they would very likely facilitate API changes, but it's
 something I've been thinking about in the name of making the library
 smaller and more lightweight.

iteratee and regions were both released well after Takusen was
written. I think iteratee is just the same idea generalised to other
types (Binary, ByteStrings, IO, etc). Perhaps it would help to use it
and standardise the interface, but I haven't looked into it at all. It
looks like it might be a considerable amount of work.

Using regions might be more feasible (i.e. easier), but again I
haven't considered it. Takusen's implementation also pre-dates regions
considerably, and it works well for us as is. The actual
implementation is very little code.

That is, in both cases I don't see a big benefit from switching over
to these libraries, considering the amount of work I think it would
take (esp for iteratee). There are plenty of other things on the to-do
list which I think should take higher priority e.g.
 - splitting Takusen into multiple packages: a core interface, and
then separate packages for each backend.
 - better docs, as you've requested.
 - support for blobs/clobs

As Gregory just pointed out, using other libs adds further
dependencies to Takusen. One of our earlier goals was to make it easy
to install, which in the days before cabal meant fewer dependencies on
external libs. cabal now mitigates that concern considerably, so
perhaps we should relax more now when it comes to using external libs.
Here is the list of things that I can think of right now which are
currently internalised in Takusen, but which are also implementated in
hackage libs:
 - extensible exceptions
 - EMonadIO
 - regions
 - iteratee

I'm not saying the way it is now is right or best, but it got there
through various historical decisions, which were made with the best
information available at the time, and in environments that differ
from the current.

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


Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-01 Thread Jason Dagit
Using the generous resources of community.haskell.org I've created a mailing
list for takusen discussions.  I encourage interested parties to join that
list and maybe move the takusen design discussion there:
  http://projects.haskell.org/cgi-bin/mailman/listinfo/takusen

I've added the list in the CC.

I've also created a trac instance for wiki/bug tracking:
  http://trac.haskell.org/takusen/report

My comments are below.

On Sun, Aug 1, 2010 at 12:55 PM, Alistair Bayley alist...@abayley.orgwrote:

 At the risk of seeming a bit defensive, I'll respond to some of these
 points...

  Despite this, it seems to have a couple faults:
   * Few tutorials, aside from the Haddocks in Database.Enumerator

 True. I put a bit of effort in to writing the docs in
 Database.Enumerator as a sort of tutorial, but it doesn't work as well
 as a properly written tutorial. Perhaps this would be better placed on
 the wiki, but it's quite a bit of work, assuming you would prefer
 something more than a simple cut-n-paste from the generated docs.


More tutorials is a great idea.  Perhaps I can write a few simple 'how to
get started' examples and post them on my blog.  Although, the wiki is a
nice place too.  Any preference?  If I post it on my blog it might be easier
to control the formatting and voice, but if it's on the wiki other can
update it and it's in a central location.




   * Very crufty old code in some spots (I see lots of references to
  GHC 6.6 and the 'extensible exceptions' changes in the cabal file
  among other places, which I believe we're all well beyond now. There
  also seems to be random tidbits that could be removed in favor of a
  library/removed because they're not necessary.) This should IMO all be
  removed under the argument Get a more recent GHC although people may
  disagree here.

 Maybe... We've put some effort into supporting older versions of ghc,
 mainly because quite a few distributions have quite long update
 cycles. If you're stuck in an environment (some unis, some employers?)
 where you are only allowed tools from the last stable distribution,
 you may well be many releases behind current ghc. If everyone agrees
 that 6.8 should be the oldest ghc we should test and support, then
 that does make things a little simpler. Are there any distros still
 shipping with ghc-6.6?


This same issues comes up fairly often on the darcs-users mailing list.  My
understanding of the way things are handled there, is that if there is ever
a good reason to drop support for a version of GHC then the person who wants
to drop support is supposed to look and see what is in Debian stable.  If
debian stable is still covered after the proposed changes then they are
accepted automatically.  If Debian stable would not be covered, then there
is a discussion to reach consensus.

The reasons it works are: a) support is dropped lazily when there is a real
demand to do so, instead of artificially; b) letting people discuss it
case-by-case allows the decision to be made with full context.



 BTW, I thought extensible-exceptions first shipped with 6.10. I don't
 think everyone is off 6.8 yet, so we'd want to keep that cabal switch
 in for a little longer if we intend to support 6.8.


   * It would be nice if we could make it depend on nicer libraries
  instead of rolling its own stuff - for example, we have Lato's
  excellent iteratee package, and Bas van Dijk has written a (IMO
  woefully underappreciated!) 'regions' package with encapsulate the
  lightweight monadic regions idea Oleg proposed. Of course, due to
  design, neither of these may work properly for Takusen's case, and if
  they did they would very likely facilitate API changes, but it's
  something I've been thinking about in the name of making the library
  smaller and more lightweight.

 iteratee and regions were both released well after Takusen was
 written. I think iteratee is just the same idea generalised to other
 types (Binary, ByteStrings, IO, etc). Perhaps it would help to use it
 and standardise the interface, but I haven't looked into it at all. It
 looks like it might be a considerable amount of work.


I think that iteratees are a wonderful concept and I like them, but...I'm
not terribly fond of the iteratee package.  I find that with it's full
generality that it is somewhat difficult to program with.  I've actually
found it easier to 'roll your own' when I need iteratees.  My preference
would be to switch to some later iteration of the iteratee design.  I
believe John Lato is currently working on a new API.



 Using regions might be more feasible (i.e. easier), but again I
 haven't considered it. Takusen's implementation also pre-dates regions
 considerably, and it works well for us as is. The actual
 implementation is very little code.


I haven't looked at the regions package either, but it certainly sounds like
a good idea to switch to it.



 That is, in both cases I don't see a big benefit from switching over
 to these libraries, 

Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-01 Thread Felipe Lessa
On Sun, Aug 1, 2010 at 6:58 PM, Jason Dagit da...@codersbase.com wrote:
 This same issues comes up fairly often on the darcs-users mailing list.  My
 understanding of the way things are handled there, is that if there is ever
 a good reason to drop support for a version of GHC then the person who wants
 to drop support is supposed to look and see what is in Debian stable.  If
 debian stable is still covered after the proposed changes then they are
 accepted automatically.  If Debian stable would not be covered, then there
 is a discussion to reach consensus.
 The reasons it works are: a) support is dropped lazily when there is a real
 demand to do so, instead of artificially; b) letting people discuss it
 case-by-case allows the decision to be made with full context.

Do you know if they test on GHC 6.8?  Or do they just avoid extensions
and hope it works? =)

Cheers,

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


Re: [Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-08-01 Thread Jason Dagit
On Sun, Aug 1, 2010 at 5:11 PM, Felipe Lessa felipe.le...@gmail.com wrote:

 On Sun, Aug 1, 2010 at 6:58 PM, Jason Dagit da...@codersbase.com wrote:
  This same issues comes up fairly often on the darcs-users mailing list.
  My
  understanding of the way things are handled there, is that if there is
 ever
  a good reason to drop support for a version of GHC then the person who
 wants
  to drop support is supposed to look and see what is in Debian stable.  If
  debian stable is still covered after the proposed changes then they are
  accepted automatically.  If Debian stable would not be covered, then
 there
  is a discussion to reach consensus.
  The reasons it works are: a) support is dropped lazily when there is a
 real
  demand to do so, instead of artificially; b) letting people discuss it
  case-by-case allows the decision to be made with full context.

 Do you know if they test on GHC 6.8?  Or do they just avoid extensions
 and hope it works? =)


They use a farm of buildbots to test:
  http://buildbot.darcs.net/

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


[Haskell-cafe] ANNOUNCE: Takusen 0.8.6

2010-07-31 Thread Jason Dagit
Hello,

The Takusen team would like to announce the latest release of Takusen,
0.8.6.  This is primarily a bug fix and test suite enhancement
release.  The most notable new feature is limited support for string
encodings with ODBC.  The full list of changes is included at the
at the end of this announcement.

= Interested in Takusen development? =

Takusen is looking for a new long term maintainer.  I have agreed to
fill the role of maintainer for now, but we are seeking an
enthusiastic individual with spare time and a desire to lead Takusen
development.

= How to get it =

This release is available on hackage:
  cabal update  cabal install Takusen

The source code is available on code.haskell.org:
  darcs get http://code.haskell.org/takusen


= New features =

- Alistair Bayley:

  * Database/PostgreSQL/PGFunctions.lhs: show instance for UUID prints
Word64s in hex.

  * Database/PostgreSQL/Enumerator.lhs: add UUID and marshaling
functions.

  * Database/PostgreSQL/PGFunctions.lhs: add UUID and marshalling
functions.

  * Database/ODBC/OdbcFunctions.hsc: add support for different String
encodings. New functions to marshal to/from various encodings
(Latin1, UTF8, UTF16), and bind/get functions changed to use
these.

- Daniel Corson
  * binary data with postgres

= Bug fixes =

- Alistair Bayley:

  * Database/ODBC/OdbcFunctions.hsc: fix bug in
mkBindBufferForStorable for Nothing (null) case: pass -1
(sqlNullData) as value size.

  * Database/ODBC/OdbcFunctions.hsc: use sqlNullData in
bindParamString Nothing case, rather than -1. A bit more
descriptive.

  * Database/ODBC/Enumerator.lhs: store bind buffers in stmt object,
so we retain reference to them for lifetime of statement. Destroy
with statement (well, lose the reference). Should fix bind errors
found by Jason Dagit.

  * Database/ODBC/Enumerator.lhs: Oracle only supports two transaction
isolation levels (like Postgres). String output bind parameters
have max size 8000 (we use 7999 because module OdbcFunctions adds
one to the size).

  * Database/ODBC/OdbcFunctions.hsc: string parameters have different
SQL data types when binding columns (SQL_CHAR) and parameters
(SQL_VARCHAR). Oracle only supports two transaction isolation
levels.

  * Database/PostgreSQL/PGFunctions.lhs: fix byteaUnesc and add
byteaEsc.


= Refactoring =

- Jason Dagit:
  * update urls in cabal file

- Alistair Bayley:

  * Takusen.cabal: fixed QuickCheck version spec.

  * Takusen.cabal: bump version to 0.8.6.

  * Database/ODBC/OdbcFunctions.hsc: makeUtcTimeBuffer: pass struct
size as both buffer size and data size in call to mkBindBuffer.

  * Database/ODBC/OdbcFunctions.hsc: mkBindBufferForStorable calls
mkBindBuffer (reduces duplicated code).

  * Database/ODBC/Enumerator.lhs: add instance for EnvInquiry to
change session char encoding.

  * Database/ODBC/Enumerator.lhs: add comments to beginTransaction.

  * Database/Util.lhs: print printArrayContents, to match function
name.

  * Database/PostgreSQL/Enumerator.lhs: expose byteaEsc and
byteaUnesc.

= New tests and changes to tests =

- Alistair Bayley:

  * Database/ODBC/Test/OdbcFunctions.lhs: added testBindDouble to test
Nothing (null) case for Storable types.

  * Database/ODBC/Test/OdbcFunctions.lhs: split transaction isolation
level tests so there is one test per level. String marshaling
tests use 0x10FF40 as max unicode codepoint, because that keeps
Oracle happy. Max size for String parameter buffer is 7999 (SQL
Server restriction). Don't bury errors raised by tests; print, but
continue. Fix fixture cleanup bug in testBindOutput (dropped wrong
procedure).

  * Database/ODBC/Test/Enumerator.lhs: suffix xxx to bindOutput test
expected value.

  * Database/PostgreSQL/Test/PGFunctions.lhs: tests for UUID.

  * Database/PostgreSQL/Test/Enumerator.lhs: round-trip test for UUID.

  * Database/PostgreSQL/Test/PGFunctions.lhs: test select of UUID
value.

  * Database/ODBC/Test/OdbcFunctions.lhs: set client charset to UTF8
when postgresql.

  * Database/Test/Enumerator.lhs: add order-bys to tests with unions.

  * Database/PostgreSQL/Test/PGFunctions.lhs: add order-by to union
test.

  * Database/ODBC/Test/Enumerator.lhs: set char encoding to
UTF8. inquire InfoDbmsName already returns lowercase.

  * Takusen.cabal: add random to build-depends for tests.

  * Database/Test/Enumerator.lhs: make test fixtures more friendly to
MS Access.

  * Database/ODBC/Test/OdbcFunctions.lhs: tests modified for MS Access
(date tests), plus use new char-encoding aware functions.

  * Database/ODBC/Test/Enumerator.lhs: change boundary dates test to
not use union. Union seems to make MS Access choke.

  * Database/PostgreSQL/Test/PGFunctions.lhs: add tests for bytea,
including QuickCheck roundtrip.

  * Database/PostgreSQL/Test/Enumerator.lhs: add bytea bind and select
test.