Dear Michael, thank you very much for your quick and interesting response. This looks very much like what I want!
Regards, Alexander Foremny 2012/7/31 Michael Snoyman <mich...@snoyman.com>: > On Tue, Jul 31, 2012 at 1:13 PM, Alexander Foremny > <alexanderfore...@gmail.com> wrote: >> Hello list, >> >> I am currently thinking that a problem of mine would best be solved if >> there was a Map-like data structure in which the value returned is >> parametrized over the lookup type. >> >> I wonder is this makes sense and if such a data structure exists or if >> it could be created while still being well typed. I essentially want >> to statically define a scope of Key values and dynamically define a >> list of keys. >> >>> -- Scope of possible keys. >>> type Label = String >>> data Key a where >>> KeyStr :: Label -> Key String >>> KeyInt :: Label -> Key Int >>> KeyChoice :: Label -> [a] -> Key a >> >>> -- Some key values, to be extended at runtime. >>> strKey "Some String" >>> strKey' "Another String" >>> intKey "Some integer" >>> choiceKey "Chose one" [ "a", "b", "c" ] :: KeyChoice String >> >> Now I need a data structure to possibly associate a value to the key. >> >>> data MapG = ... >>> type Value a = a >>> insert :: Key a -> Value a -> MapG Key Value -> MapG Key Value >>> lookup :: Key a -> MapG Key Value -> Maybe (Value a) >> >> I tried implementing this with multiple Map k a's. I tried adding a >> phantom type on some storage type of to implement KeyChoice as of type >> Key Int, but I ran into troubles with this approach. I wonder if >> Dynamic or Type Families could achieve this, but I am quite at a loss >> and would like to hear your opinion. >> >> I did try to search for this a bit, but I don't quite know how to >> phrase my problem. I'd like to apologize in advance if this question >> has been asked already. >> >> Regards, >> Alexander Foremny >> >> _______________________________________________ >> Haskell-Cafe mailing list >> Haskell-Cafe@haskell.org >> http://www.haskell.org/mailman/listinfo/haskell-cafe > > I think you might be looking for something like vault[1]. > > HTH, > Michael > > [1] http://hackage.haskell.org/package/vault _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe