Christopher Done wrote:
On 4 October 2013 10:56, Heinrich Apfelmus <apfel...@quantentunnel.de> wrote:
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.
lock :: Key a -> a -> Locker
I can't pass anything with class constraints to that.
I don't know what "something with a class constraint" means. But I guess
you want to pass a value with a *polymorphic* type? This is no problem,
but requires impredicative polymorphism:
a = (forall b. Show b => b -> IO ())
lock :: Key (forall b. Show b => b -> IO ())
-> (forall b. Show b => b -> IO ())
-> Locker
Unfortunately, GHC's support for that is a little shaky, but a solution
that always works is to put it in a new data type.
data Dummy = Dummy { unDummy :: forall b. Show b => b -> IO () }
lock :: Key Dummy -> Dummy -> Locker
It seems to me that your problem decomposes into two problems:
1. A heterogenous store for values of different types.
2. Values with polymorphic instead of monomorphic types.
Solution for problem 1 are usually restricted to monomorphic types, but
you can work around it.
Best regards,
Heinrich Apfelmus
--
http://apfelmus.nfshost.com
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe