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

Alp Mestanogullari alpmestan
Fri Oct 4 15:12:20 UTC 2013


Hi Chris,

Maybe this package (from Edward Kmett, surprisingly) could help:
http://hackage.haskell.org/package/constraints-0.3.3/docs/Data-Constraint.html?
Considering it kind of reifies the type class constraints, I'm wondering
whether you could use this to carry the constraints along the value you're
storing? I haven't given it a lot of thoughts for now, but maybe you can
get something decent working with this?


On Fri, Oct 4, 2013 at 12:41 PM, Heinrich Apfelmus <
apfelmus at quantentunnel.de> wrote:

> Christopher Done wrote:
>
>> On 4 October 2013 10:56, Heinrich Apfelmus <apfelmus at 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 at haskell.org
> http://www.haskell.org/**mailman/listinfo/haskell-cafe<http://www.haskell.org/mailman/listinfo/haskell-cafe>
>



-- 
Alp Mestanogullari
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20131004/628e55aa/attachment.htm>



More information about the Haskell-Cafe mailing list