Sessions types in Haskell