Re: How to user-define a type equality constraint?

2021-04-06 Thread Anthony Clayden
> But why does this matter?

Because I want the semantics of that equality constraint, without switching
on any of these, which I don't otherwise use:

GADTs
TypeFamilies
TypeOperators

And if that means I can't use infix `~` in my constraints, I'll put up with
that. (I'd user-define a conventional class, say `TypeCast`. Could be that
has to be defined in terms of `~`, in which case I'd put that in a shim
module as the only place with those extensions.)
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users


Re: How to user-define a type equality constraint?

2021-04-06 Thread Richard Eisenberg


> On Apr 6, 2021, at 7:44 AM, Anthony Clayden  
> wrote:
> 
> > But why does this matter?
> 
> Because I want the semantics of that equality constraint, without switching 
> on any of these, which I don't otherwise use:
> 
> GADTs
> TypeFamilies
> TypeOperators
> 
> And if that means I can't use infix `~` in my constraints, I'll put up with 
> that. (I'd user-define a conventional class, say `TypeCast`. Could be that 
> has to be defined in terms of `~`, in which case I'd put that in a shim 
> module as the only place with those extensions.)
> 

A shim module would work for you here, indeed.

Individuals' opinions of extensions will differ, but TypeOperators is much less 
powerful than either of the others: it affects only parsing, and in a fully 
backward-compatible way.

Richard___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users


Re: How to user-define a type equality constraint?

2021-04-06 Thread Carter Schonwald
That sounds like a bug/oversight!  Is that not fixed in 9.2?

On Mon, Apr 5, 2021 at 11:08 PM David Feuer  wrote:

> `Char` is defined in user code. What you really can't define are Char# and
> TYPE, and you can't modify `RuntimeRep`. Speaking of `Char#`, I see that in
> 9.0, at least, it has kind TYPE 'WordRep. Why is that not Word32Rep?
>
> On Mon, Apr 5, 2021, 10:50 PM Richard Eisenberg  wrote:
>
>>
>>
>> On Apr 1, 2021, at 8:12 PM, Anthony Clayden 
>> wrote:
>>
>> Can I user-define a conventional type-class that behaves more like `(~)`?
>>
>>
>> I don't think so.
>>
>> But why does this matter? I can't define `Char` in user code, but it's
>> exported from the Prelude and requires no extensions. While I can define Eq
>> in user code, I can't make `deriving` work with my version. I can't define
>> `error` in user code. There are many others, I'm sure.
>>
>> So: why does this matter?
>>
>> Thanks,
>> Richard
>> ___
>> Glasgow-haskell-users mailing list
>> Glasgow-haskell-users@haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users
>>
> ___
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users
>
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users