[Haskell-cafe] External system connections
Michael Orlitzky
michael at orlitzky.com
Mon Jul 11 17:52:12 CEST 2011
On 07/11/11 11:41, Felipe Almeida Lessa wrote:
>
> Yes, there's a documentation problem. But you can guess by the types =).
>
> IO a: opens a new resource a.
> a -> IO (): disposes the given resource.
> Int: maximum number of open resources.
> Pool a -> m b: the action you want to execute; after it executes, the
> pool is destroyed.
> a -> IO Bool: check if the resource is still alive.
> m b: the result of running your given action with a new pool.
>
> The key to understanding all of this is looking backwards from the result.
>
> 1) The result is m b. Where did this come from?
> 2) Well, there's a 'Pool a -> m b'. So it runs the action for me. So
> this is like a 'withFile :: FilePath -> (Handle -> IO a) -> IO a'
> function.
> 3) So if it is a 'Pool a', then the resource is of type 'a'.
> 4) The only function returning 'a' is 'IO a', so this creates the resource.
> 5) By the same reason, 'a -> IO ()' disposes it.
> 6) 'a -> IO Bool' is confusing, but there's a doc for that.
> 7) 'Int' is also confusing, but since this is a pool, this must be the
> maximum number of open resources.
Magic, got it =)
More information about the Haskell-Cafe
mailing list