On Tue, Oct 15, 2013 at 4:49 AM, Edward Kmett <[email protected]> wrote:

> The issue with such an explicit false is that it requires more magic on
> behalf of the compiler.
>
> It would have to be filled in whenever an explicit `instance Eq Blah` was
> written.
>
> Recall that
>
> deriving instance Eq Blah
>
> can occur after the data type declaration site and may have to be used for
> many more complicated recursive data types, so it isn't sufficient to fill
> in at the data type declaration.
>

Yes, I know. But I don't think this would require _more_ magic than the
class instances.
And I don't see how class instances solve the problem; how can the user be
prevented
from defining an |instance Derives MyData Eq| if the instance wasn't indeed
derived? Only
through compiler magic...

Pedro


>
> -Edward
>
>
> On Mon, Oct 14, 2013 at 11:41 PM, Ryan Newton <[email protected]> wrote:
>
>> But what stops the user from defining their own instances if they in fact
>> did not derive it?
>>
>> The explicit "False" in Pedro's formulation seems to serve this purpose.
>>
>>
>>
>> On Mon, Oct 14, 2013 at 11:20 PM, Nicolas Frisby <
>> [email protected]> wrote:
>>
>>> The formulation as a type family seems to conflict with the open-world
>>> principle. Would a class-based encoding instead be sufficient?
>>>
>>> -- the proposed, special wired-in class
>>> class Derives (t :: k1) (c :: k2)
>>>
>>> -- GHC would infer these from Pedro's example's declarations
>>> instance Derives MyData Eq
>>> instance Derives MyData Generic
>>> instance Derives MyData Show
>>>
>>> NB that there is no instance Derives MyData Ord, but standalone
>>> deriving could yield one "later"
>>>
>>> On Mon, Oct 14, 2013 at 10:02 PM, Ryan Newton <[email protected]>wrote:
>>>
>>>> Hey, that's an awesome formulation!  Thanks Pedro.
>>>>
>>>> Any idea how much work this would be to implement in GHC, if it did
>>>> garner approval?
>>>>
>>>>
>>>> On Tue, Oct 8, 2013 at 3:48 AM, José Pedro Magalhães <[email protected]
>>>> > wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> On Mon, Oct 7, 2013 at 10:32 AM, Dag Odenhall 
>>>>> <[email protected]>wrote:
>>>>>
>>>>>> Here‘s a thought: doesn’t Generic already have an unused phantom
>>>>>> type that's only there “just in case we need to add something in the
>>>>>> future”?
>>>>>>
>>>>> No, it doesn't.
>>>>>
>>>>> Just a thought: what if we had a type family
>>>>>
>>>>> type family Derives (t :: k1) (c :: k2) :: Bool
>>>>>
>>>>> which would automatically be instantiated by GHC appropriately? E.g.,
>>>>> if the user had the following code:
>>>>>
>>>>> data MyData = MyData deriving (Eq, Generic)
>>>>> deriving instance Show MyData
>>>>> instance Ord MyData
>>>>>
>>>>> GHC would automatically instantiate:
>>>>>
>>>>> type instance Derives MyData Eq      = True
>>>>> type instance Derives MyData Generic = True
>>>>> type instance Derives MyData Show    = True
>>>>> type instance Derives MyData Ord     = False
>>>>>
>>>>> Would this be something Ryan could use for detecting safe instances
>>>>> for LVish?
>>>>>
>>>>>
>>>>> Cheers,
>>>>> Pedro
>>>>>
>>>>> _______________________________________________
>>>>> ghc-devs mailing list
>>>>> [email protected]
>>>>> http://www.haskell.org/mailman/listinfo/ghc-devs
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> ghc-devs mailing list
>>>> [email protected]
>>>> http://www.haskell.org/mailman/listinfo/ghc-devs
>>>>
>>>>
>>>
>>
>> _______________________________________________
>> ghc-devs mailing list
>> [email protected]
>> http://www.haskell.org/mailman/listinfo/ghc-devs
>>
>>
>
> _______________________________________________
> Libraries mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/libraries
>
>
_______________________________________________
ghc-devs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to