[Haskell-cafe] how would this be done? type classes? existentialtypes?