Hello Neil, Sunday, September 10, 2006, 2:21:50 PM, you wrote:
>> class Monad m | Functor m, Monoid m where ... > It also makes grep'ing easier. yes, i also had problems finding class declarations in base package >> sequence :: [m a] -> m [a] | Monad m > I don't like this. In the other two instances you are moving the most > important information (the name of the thing) to the front. In this > the name is at the front, but the instances move to the end, which > isn't really where they should be. And following the function | rule > function | predicates = body > I would have said that logically, you want: > sequence | Monad m :: [m a] -> m [a] > (of course, this might present a problem for parsing...) > Note this also makes sense compared to your: > data Data | Classes = Alternatives you have omitted "patterns, or parameters shape" part: function shapes_of_parameters | guards_for_parameters = result so, in my proposal: data T a b | Eq a, Monad b = .... and function signature obey the same rule - first write shape of function type, then narrow type variables used to some classes: addEncoding :: Encoding m -> h -> m (WithEncoding m h) | Monad m, ByteStream m h Of course, that's more important is readability. it's discussible whether we need to know that m is monad and h is stream before reading shape of function type btw, the following is anyway most readable: sequence :: [Monad a] -> Monad [a] ;) -- Best regards, Bulat mailto:[EMAIL PROTECTED] _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe