[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