[Haskell-cafe] Re: Keeping an indexed collection of values?

Heinrich Apfelmus apfelmus at quantentunnel.de
Fri Aug 21 07:26:19 EDT 2009


Heinrich Apfelmus wrote:
> Job Vranish wrote:
>> I've been in a situation a lot lately where I need to keep a collection of
>> values, and keep track of them by a persistent index.
>>
> 
>    module Store (Key, Store, empty, add, delete, lookup) where
> 
>    newtype Key = Key { int :: Int }
> 
>    empty  :: Store a
>    add    :: a -> Store a -> (Key, Store a)
>    delete :: Key -> Store a -> Store a
>    lookup :: Key -> Store a -> Maybe a
> 
> This way, the user doesn't know and care how  Key  is implemented.
> 
> Last but not least, there is the issue that trying to use an already
> deleted key might yield a wrong result instead of an error. That
> shouldn't happen if used correctly, but might give a headache when
> debugging.

There is even a very simple way to prevent at least some cases of
misuse, when one key is accidentally used on stores of different type. A
phantom parameter will do the trick:

    newtype Key a = Key { int :: Int }

    add    :: a -> Store a -> (Key a , Store a)
    delete :: Key a -> Store a -> Store a
    lookup :: Key a -> Store a -> Maybe a



Regards,
apfelmus

--
http://apfelmus.nfshost.com



More information about the Haskell-Cafe mailing list