[Haskell-cafe] External system connections

Michael Snoyman michael at snoyman.com
Mon Jul 11 19:49:08 CEST 2011


On Mon, Jul 11, 2011 at 6:27 PM, Michael Orlitzky <michael at orlitzky.com> wrote:
> On 07/10/11 15:37, Felipe Almeida Lessa wrote:
>> You don't need to do it, it is already done =).  See the pool
>> package by Michael Snoyman on Hackage [1].  More specifically, see
>> createPoolCheckAlive [2].
>>
>> Cheers,
>>
>> [1] http://hackage.haskell.org/package/pool [2]
>> http://hackage.haskell.org/packages/archive/pool/0.1.0.2/doc/html/Data-Pool.html#v:createPoolCheckAlive
>>
>>
>
> How do people use this stuff? The README is empty, there's no
> documentation, and none of the functions are commented. I'm forced to
> conclude that there are people capable of looking at this,
>
>  createPoolCheckAlive :: MonadControlIO m
>                          => IO a
>                          -> (a -> IO ())
>                          -> Int
>                          -> (Pool a -> m b)
>                          -> (a -> IO Bool)
>                          -> m b
>
> and knowing immediately what it does.
>
> I'm still a beginner, and I don't think I have a use for this package
> (what does it do?), but I've run into similar situations with other
> packages and would genuinely like to know (as opposed to just complain
> about it).
>

Author of the package speaking. I agree, that's a problem :). I've
just uploaded a new version[1] that is properly documented, though it
will take a bit for Hackage to generates the Haddocks. As Brandon
said, the reason this wasn't documented in the first place is that it
was an internally used module for Persistent that I decided after the
fact to release separately.

As for Bryan's resource-pool: currently I would strongly recommend
*against* using it for any purpose. It is based on
MonadCatchIO-transformers[2], which is a subtly broken package. In
particular, when I tried using it for pool/persistent in the first
place, I ended up with double-free bugs from SQLite. As an abridged
history, I ended up writing a replacement called MonadInvertIO, which
later was superceded by MonadPeelIO[3] and MonadControlIO[4]. The
latter two packages are both much more correct that MonadCatchIO, and
either one should be used in its place.

I did email Bryan about this a bit ago, but he didn't get back (he
*is* a very busy guy). Ideally, I think that we don't need to have
both pool and resource-pool, but such is the situation right now.

Michael

[1] http://hackage.haskell.org/package/pool-0.1.0.3
[2] http://hackage.haskell.org/package/MonadCatchIO-transformers-0.2.2.2
[3] http://hackage.haskell.org/package/monad-peel
[4] http://hackage.haskell.org/package/monad-control-0.2.0.1



More information about the Haskell-Cafe mailing list