[Haskell-cafe] Trying to reduce memory costs of String duplicates

Eugene Kirpichov ekirpichov at gmail.com
Sat Sep 5 09:38:44 EDT 2009


2009/9/5 Eugene Kirpichov <ekirpichov at gmail.com>:
> 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 <gue.schmidt at web.de>:
>> 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
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>
>
>
> --
> Eugene Kirpichov
> Web IR developer, market.yandex.ru
>



-- 
Eugene Kirpichov
Web IR developer, market.yandex.ru


More information about the Haskell-Cafe mailing list