Hi Antoine,
Thanks for your interest.
What is the 'Commands' type? What is the 'Map' class?
> interpret :: (CommandIO io, Map t) => Commands t io CommandResult
>
This doesn't work because the API you want to provide makes it
possible to do wrong.
Your class might be able to fit into WAI if each back-end provided a
single function:
> execute :: (Command -> io CommandResult) -> io ()
This should make sense for console, Handle-based and HTTP.
Am I on the right track?