[Haskell-cafe] ANNOUNCE: usb-safe-0.1
Bas van Dijk
v.dijk.bas at gmail.com
Wed Dec 9 08:35:32 EST 2009
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
I released the usb-safe package to prevent you making these errors. See:
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
- 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.
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
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
More information about the Haskell-Cafe