[Haskell-cafe] Re: Using Collections: ElemsView and KeysView
jeanphilippe.bernardy at gmail.com
Mon Aug 20 04:50:34 EDT 2007
foldr on ElemsView is defined as such:
> foldr f i (ElemsView c) = foldr (f . snd) i c
so, for example:
> getElementList = toList . ElemViews
When I designed this code (some years ago), I didn't like the "fold" of Map to
have the type:
> fold :: (a -> b -> b) -> b -> Map k a -> b
This just doesn't make sense if we see maps as a collection of (key, value)
pairs. (Indeed, toList :: Map k a -> [(k, a)])
In order to be consistent, but to provide an easy way to migrate to the new
collection classes I was designing, I provided the ElemViews/KeyViews to
"switch" to the former behaviour on a case by case basis.
This also allows for definining optimized versions of foldr, etc. for each types
that supports "Views", but this was tedious, so I never did it. GHC "RULE"
pragma is probably better suited to the purpose anyway.
As for the lack of documentation, everyone is very welcome to contribute ;)
More information about the Haskell-Cafe