[Haskell-cafe] Store type-class polymorphic values generically

Heinrich Apfelmus apfelmus
Fri Oct 4 08:56:38 UTC 2013

Christopher Done wrote:
> It's very easy to state this problem without enough details and mislead
> people into providing a solution for a different problem, so I'll try to
> include all the information and use-case. I need a function that can
> store a value in a concrete opaque type. I know the type of the value
> when I store it, and I know the type of the value when I extract it,
> insofar as I know the type inclusive of a class constraint context. But
> the container must store many different things at once. Given that I
> know the type of the thing when I store it and when I extract it, there
> ought to be a ?safe? way to do this, in the same way that Data.Dynamic
> is ?safe?.
> [..]

I have to ashamedly admit that I didn't read your problem description in 
its entirety, but maybe my  vault  package can help?


In particular, the  Locker  stores arbitrary values like  Dynamic , 
except that values are extracted and removed with the help of a  Key . 
This gets rid of the  Typeable  constraint.

Note that there is a fundamental problem with storing polymorphic types, 
which is related to the "value restriction for reference types". One of 
the main points of the Typable class is actually that it enforces 
monomorphic types. Similarly, the  vault  library enforces monomorphic 
types by having  newKey  in the IO monad.

Best regards,
Heinrich Apfelmus


More information about the Haskell-Cafe mailing list