The usb package

This library enables you to communicate with USB devices from
userspace. It is implemented as a high-level wrapper around
bindings-libusb which is a low-level binding to the C library:
libusb-1.*.

The USB transfer functions in this library have a simple synchronous
interface (they block) but are implemented using the libusb
asynchronous interface. They integrate with the GHC event manager
making them efficient (no busy-loops) and interruptible (throwing an
exception to the thread executing a transfer immediately cancels the
transfer).

If the GHC event manager is not available (because you're either not
using GHC or because you're on Windows) the library degrades
gracefully to the libusb synchronous implementation.

This documentation assumes knowledge of how to operate USB
devices from a software standpoint (descriptors, configurations,
interfaces, endpoints, control/bulk/interrupt/isochronous
transfers, etc). Full information can be found in the USB 2.0
Specification.

For an example how to use this library see the usb-example
package at: