> I'm no fan of (!!) on lists or other containers where it isn't O(1), > but lookup/member are a bit more promising. However are there any > useful derived operations or constructions that can be defined only in > terms of a Lookup type class? For comparison, Monoid has mconcat as a > derived op and e.g. the Writer monad can be usefully abstract by > relying only on the Monoid interface as can Foldable.
I was thinking of (!!) as an unsafe lookup, where lookup is the safe one. Of course historically (!!) considers lists as (Int -> elt) while elem considers them a set, which is why you'd need some newtype wrappers. Anyway, I'd be happy to not include the unsafe variants at all. That would mean putting [] into Setlike with 'member' but not Maplike with 'lookup'. You'd have to come up with a better name or hide the Prelude alist lookup. I don't know about derived operations, I suppose you could come up with some sort of Evironment monad that required merely a (Maplike a) class constraint instead of a concrete data type like Map, but for me the prime motivation would be the short universal name. I could stick it in my "import unqualified" toolbox and type less. > Excepting Data.Tree, Data.Graph and HashTable, 'containers' seems > pretty regular now - it certainly has moved on with 0.3.0.0. Yes, and it's not a big deal to me. I use Map and Set and List and the overhead of separate functions for each is pretty minimal. If I used a wider variety of containers I'd probably want it more. _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
