new-typeable, new cast?
Richard Eisenberg
eir at cis.upenn.edu
Mon Jul 22 11:19:45 CEST 2013
There seems to be a small tangle. The proposal includes deprecating
gcast1 and gcast2 in favor of the poly-kinded gcast. But, there is a
small discrepancy between these. Here are the type signatures:
> gcast :: forall a b c. (Typeable a, Typeable b) => c a -> Maybe (c b)
> gcast1 :: forall c t t' a. (Typeable (t :: * -> *), Typeable t')
> => c (t a) -> Maybe (c (t' a))
The difference is that gcast1 does *not* require the variable `a` to be
Typeable, whereas defining gcast1 = gcast does require this. Not
requiring `a` to be Typeable seems correct to me, as the type signature
of gcast1 requires both uses of `a` to be the same. But, gcast isn't
smart enough to know that. Here are some ideas of how to proceed:
- Keep gcast1 and gcast2 undeprecated.
- Require clients to add more Typeable constraints (for example, in
Data.Data) to get their code to compile with gcast.
- Come up with some other workaround, but none is striking me at the
moment.
Thoughts?
Richard
On 2013-07-22 09:44, Richard Eisenberg wrote:
> I was waiting to respond to Shachaf's email saying "pushed", but
> instead, I have to say "currently validating".
>
> Expect this by the end of the day. Sorry it's taken so long!
>
> Richard
>
> On 2013-07-22 09:23, José Pedro Magalhães wrote:
>> Thanks for bringing this up again. This was started in my data-proxy
>> branch of base [1],
>> but never really finished. We definitely want to have this in 7.8, and
>> I think there's
>> only some minor finishing work to do (check if we have all the
>> instances we want,
>> document, etc.). Perhaps you can look through what's there already,
>> and what you
>> think is missing? I'm more than happy to accept contributing patches
>> too :-)
>>
>> Thanks,
>> Pedro
>>
>> On Sun, Jul 21, 2013 at 3:09 AM, Shachaf Ben-Kiki <shachaf at gmail.com>
>> wrote:
>>
>>> On Mon, Mar 4, 2013 at 11:12 AM, José Pedro Magalhães
>>> <jpm at cs.uu.nl> wrote:
>>>> Hi,
>>>>
>>>> On Mon, Mar 4, 2013 at 4:51 PM, Richard Eisenberg
>>> <eir at cis.upenn.edu> wrote:
>>>>>
>>>>> Unless I'm missing something, this all looks very
>>> straightforward. The
>>>>> implementation is there, already, in the guise of (gcast Refl).
>>> We would
>>>>> just shuffle the definitions around a bit. Am I indeed missing
>>> something?
>>>>
>>>>
>>>> I think that is the case indeed. Though I agree that it would be
>>> a nice
>>>> addition to Data.Typeable.
>>>>
>>>>
>>>
>>> This thread is a few months old now, but it looks like people were
>>> generally in favor of adding (gcast Refl) to Data.Typeable. I've
>>> used
>>> it in real code in at least one place since then (where I just
>>> defined
>>> it locally). It doesn't look like it's actually been added, though
>>> --
>>> is it planned to go into HEAD eventually?
>>>
>>> Shachaf
>>
>>
>>
>> Links:
>> ------
>> [1] https://github.com/ghc/packages-base/tree/data-proxy
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
More information about the Libraries
mailing list