The sessions package

Session Types for Haskell. Allows the specification of communication
protocols and then validation that an implementation does not
violate said protocol.
Ignore the build failure for hackage - it's just haddock being
rubbish.