This module is based on the content of the functional pearl How to Take the Inverse of a Type by Daniel Marshall and Dominic Orchard
data Protocol : Type
Send : Type -> Protocol -> Protocol
Recv : Type -> Protocol -> Protocol
End : Protocol
Dual : Protocol -> Protocol
data LChan : Protocol -> Type
MkLChan : LChan p