2009/9/5 Eugene Kirpichov <[email protected]>: > Should be easy to implement one. Something like this: > > class (Monad m) => MonadIntern e m | e -> m where > intern :: e -> m e > > instance (Ord e) => MonadIntern e (State (M.Map e e)) where > intern = modify . insertWith (\old new -> old))
I mean, intern e = (modify . insertWith const $ e) >> (fromJust . (`lookup`e)) `fmap` get. However, that probably also won't compile, but I think you get the idea. > > 2009/9/5 Günther Schmidt <[email protected]>: >> Hi all, >> >> I'm reading in a data of 216k records into a map of Key, Values Pairs, the >> values being strings. >> >> As it happens out of 216k String values there really are only about 6.6k >> distinct string values, so I could save a lot of RAM if I was able to >> "insert" only actually *new* string values into the map and use references >> to (string) values that already are in memory instead. >> >> Is there a container that would, if I wanted to insert an element, return a >> pair of either the previously inserted, equal value and the container >> unchanged, or the new, previously unknown value and the new container >> amended by that element? >> >> Günther >> >> _______________________________________________ >> Haskell-Cafe mailing list >> [email protected] >> http://www.haskell.org/mailman/listinfo/haskell-cafe >> > > > > -- > Eugene Kirpichov > Web IR developer, market.yandex.ru > -- Eugene Kirpichov Web IR developer, market.yandex.ru _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
