[Haskell-cafe] Enforcing data structures invariant in the type system