On Tue, Jan 30, 2007 at 09:38:26AM +0000, Ross Paterson wrote: > On Tue, Jan 30, 2007 at 09:52:01AM +1100, Donald Bruce Stewart wrote: > > ross: > > > why do you need a Put monad, which always seems to have > > > the argument type ()? Monoids really are underappreciated. > > > > For the syntax, and So that people can directly port their code from > > NewBinary. (The instances are basically unchanged). > > And so the successor to binary must have the same interface, and so on > forever. The backward compatibility argument seems weak to me, leaving > only the advantage of do-notation.
How about having both interfaces, so you can use the one you like better? class Binary t where -- | Encode a value in the Put monad. put :: t -> Put put x = Put ((), build x) -- | Encode a value using the Builder monoid build :: t -> Builder build x = snd (unPut (put x)) -- | Decode a value in the Get monad get :: Get t The downside is that GHC probably wouldn't warn about undefined methods, or would it? Best regards Tomasz _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe