[Haskell-cafe] Re: ANNOUNCE: usb-safe-0.1

Bas van Dijk v.dijk.bas at gmail.com
Wed Dec 9 09:50:08 EST 2009

On Wed, Dec 9, 2009 at 2:35 PM, Bas van Dijk <v.dijk.bas at gmail.com> wrote:
> Hello,
> My usb library provides a standard Haskell abstracting layer over
> bindings-libusb providing: abstract types instead of Ptrs, automatic
> marshalling and unmarshalling, automatic garbage collection,
> exceptions instead of integer return codes, etc..
> While all that is very nice there are still some things that you can
> do wrong. For example doing I/O with a closed device or reading from
> or writing to an endpoint which doesn't belong to the claimed
> interface. Or reading from an Out endpoint or writing to an In
> endpoint.
> I released the usb-safe package to prevent you making these errors. See:
> http://hackage.haskell.org/package/usb-safe-0.1
> usb-safe provides the following guarantees:
> -  You can't reference handles to devices that are closed. In other
> words: no I/O with closed handles is possible.
> - The programmer specifies the region in which devices should remain
> open. On exit from the region the opened devices are automatically
> closed.
> - You can't reference handles to configurations that have not been set.
> - You can't reference handles to interfaces that have not been claimed.
> - You can't reference handles to alternates that have not been set.
> - You can't reference endpoints that don't belong to a setted alternate.
> - You can't read from an endpoint with an Out transfer direction.
> - You can't write to an endpoint with an In transfer direction.
> - You can't read from or write to endpoints with the unsupported
> transfer types Control and Isochronous. Only I/O with endpoints with
> the Bulk and Interrupt transfer types is allowed.
> The primary technique used in usb-safe is called "Lightweight monadic
> regions" which was invented by Oleg Kiselyov and Chung-chieh Shan.
> See:
> http://okmij.org/ftp/Haskell/regions.html#light-weight
> Note that I consider this a preview release. In fact, I haven't tested
> the package at all. I can only guarantee you that it will pass the
> type-checker.
> As always: questions, comments and patches are more than welcome.
> Please don't look at the hscolour generated source code from the
> haddock documentation because it screws up the nice unicode symbols I
> used. If you want to read the source download the package or go
> straight to the darcs repos:
> darcs get http://code.haskell.org/~basvandijk/code/usb-safe
> regards,
> Bas

I just released a new 0.2 version of usb-safe which adds the type synonym:

type TopDeviceRegion s = DeviceRegionT s IO

and the function:

runTopDeviceRegion ∷ (∀ s. TopDeviceRegion s α) → IO α

I changed the name of 'forkDeviceRegionT' to 'forkTopDeviceRegion' and
changed its type accordingly.

Because these are API changes and additions I bumped the version from
0.1 to 0.2 following the PVP[1].



darcs get http://code.haskell.org/~basvandijk/code/usb-safe



[1] http://haskell.org/haskellwiki/Package_versioning_policy

More information about the Haskell-Cafe mailing list