
A suggestion after looking at the API docs: Usually modules called "Internal" are not meant to be used by the user of the library unless they really know what they're doing. However, the description of the package says that I should choose the implementation that suits my needs, so these aren't "Internal" modules after all. Also, they don't export anything that I would qualify as internal, such as data type constructors and helper functions. I'd suggest either renaming the "Internal" portion of the hierarchy to something else (such as "Impl") or dropping it completely (i.e., leaving the implementation modules on the same level as the "Class" modules). Everything else looks quite good! An advanced request would be having benchmarks showing which implementation is best for which use cases, esp. for [ALPRST]*SLPQ, but that's non-trivial. Cheers, :) -- Felipe.