Re: Heterogeneous equality into base?

I also agree that we should keep HRefl a distinct name, and moreover, we should keep :~: and :~~: as distinct datatypes. I'm also on-board with the idea that we should introduce a separate Data.Type.Equality.Hetero module that reexports :~~: and defines heterogeneous counterparts for sym, trans, etc. from Data.Type.Equality. I don't have a strong opinion on how they should be named (e.g., sym vs. hsym). Ryan S.

There's another version of heterogeneous equality that takes its
arguments in the other order. I'm not sure if this is generally useful
enough to want to include.
-- (:~~:) :: forall j k. j -> k -> *
data OtherEquality :: forall j. j -> forall k. k -> Type where
OtherRefl :: OtherEquality a a
On Mon, Jul 10, 2017 at 11:24 AM, Ryan Scott
I also agree that we should keep HRefl a distinct name, and moreover, we should keep :~: and :~~: as distinct datatypes.
I'm also on-board with the idea that we should introduce a separate Data.Type.Equality.Hetero module that reexports :~~: and defines heterogeneous counterparts for sym, trans, etc. from Data.Type.Equality. I don't have a strong opinion on how they should be named (e.g., sym vs. hsym).
Ryan S.
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries

This OtherEquality is actually a tad bit more general, given that GHC can't (currently) reorder type indices. But would anyone take advantage of the generality? I tend to doubt it... Richard
On Jul 10, 2017, at 12:20 PM, David Feuer
wrote: There's another version of heterogeneous equality that takes its arguments in the other order. I'm not sure if this is generally useful enough to want to include.
-- (:~~:) :: forall j k. j -> k -> *
data OtherEquality :: forall j. j -> forall k. k -> Type where OtherRefl :: OtherEquality a a
On Mon, Jul 10, 2017 at 11:24 AM, Ryan Scott
wrote: I also agree that we should keep HRefl a distinct name, and moreover, we should keep :~: and :~~: as distinct datatypes.
I'm also on-board with the idea that we should introduce a separate Data.Type.Equality.Hetero module that reexports :~~: and defines heterogeneous counterparts for sym, trans, etc. from Data.Type.Equality. I don't have a strong opinion on how they should be named (e.g., sym vs. hsym).
Ryan S.
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries

Well, I came up with another notion of heterogeneous equality (much,
much more limited in practice):
newtype HEqual (a :: j) (b :: k) = HEqual (forall (f :: forall l. l ->
Type). f a -> f b)
Implementing
fromHEqual :: forall j k (a :: j) (b :: k). HEqual a b -> a :~~: b
seems to require something like OtherEquality.
I'm not sure what you mean about not being able to reorder type
indices. OtherEquality can also be defined as a newtype around (:~~:):
newtype OtherEquality :: forall j. j -> forall k. k -> Type where
OtherEquality :: a :~~: q -> OtherEquality a q
But perhaps you mean it's more convenient than :~~:?
On Mon, Jul 10, 2017 at 1:03 PM, Richard Eisenberg
This OtherEquality is actually a tad bit more general, given that GHC can't (currently) reorder type indices. But would anyone take advantage of the generality? I tend to doubt it...
Richard
On Jul 10, 2017, at 12:20 PM, David Feuer
wrote: There's another version of heterogeneous equality that takes its arguments in the other order. I'm not sure if this is generally useful enough to want to include.
-- (:~~:) :: forall j k. j -> k -> *
data OtherEquality :: forall j. j -> forall k. k -> Type where OtherRefl :: OtherEquality a a
On Mon, Jul 10, 2017 at 11:24 AM, Ryan Scott
wrote: I also agree that we should keep HRefl a distinct name, and moreover, we should keep :~: and :~~: as distinct datatypes.
I'm also on-board with the idea that we should introduce a separate Data.Type.Equality.Hetero module that reexports :~~: and defines heterogeneous counterparts for sym, trans, etc. from Data.Type.Equality. I don't have a strong opinion on how they should be named (e.g., sym vs. hsym).
Ryan S.
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries

Sent from my iPad
On Jul 10, 2017, at 1:11 PM, David Feuer
wrote: Well, I came up with another notion of heterogeneous equality (much, much more limited in practice):
newtype HEqual (a :: j) (b :: k) = HEqual (forall (f :: forall l. l -> Type). f a -> f b)
This is "heterogeneous Leibnizian equality".
Implementing
fromHEqual :: forall j k (a :: j) (b :: k). HEqual a b -> a :~~: b seems to require something like OtherEquality.
I'm not sure what you mean about not being able to reorder type indices. OtherEquality can also be defined as a newtype around (:~~:):
newtype OtherEquality :: forall j. j -> forall k. k -> Type where OtherEquality :: a :~~: q -> OtherEquality a q
But perhaps you mean it's more convenient than :~~:?
On Mon, Jul 10, 2017 at 1:03 PM, Richard Eisenberg
wrote: This OtherEquality is actually a tad bit more general, given that GHC can't (currently) reorder type indices. But would anyone take advantage of the generality? I tend to doubt it... Richard
On Jul 10, 2017, at 12:20 PM, David Feuer
wrote: There's another version of heterogeneous equality that takes its arguments in the other order. I'm not sure if this is generally useful enough to want to include.
-- (:~~:) :: forall j k. j -> k -> *
data OtherEquality :: forall j. j -> forall k. k -> Type where OtherRefl :: OtherEquality a a
On Mon, Jul 10, 2017 at 11:24 AM, Ryan Scott
wrote: I also agree that we should keep HRefl a distinct name, and moreover, we should keep :~: and :~~: as distinct datatypes. I'm also on-board with the idea that we should introduce a separate Data.Type.Equality.Hetero module that reexports :~~: and defines heterogeneous counterparts for sym, trans, etc. from Data.Type.Equality. I don't have a strong opinion on how they should be named (e.g., sym vs. hsym).
Ryan S.
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries

That's the idea I was after. Is it good for anything?
On Jul 10, 2017 2:06 PM, "Edward Kmett"
Sent from my iPad
On Jul 10, 2017, at 1:11 PM, David Feuer
wrote: Well, I came up with another notion of heterogeneous equality (much, much more limited in practice):
newtype HEqual (a :: j) (b :: k) = HEqual (forall (f :: forall l. l -> Type). f a -> f b)
This is "heterogeneous Leibnizian equality".
Implementing
fromHEqual :: forall j k (a :: j) (b :: k). HEqual a b -> a :~~: b seems to require something like OtherEquality.
I'm not sure what you mean about not being able to reorder type indices. OtherEquality can also be defined as a newtype around (:~~:):
newtype OtherEquality :: forall j. j -> forall k. k -> Type where OtherEquality :: a :~~: q -> OtherEquality a q
But perhaps you mean it's more convenient than :~~:?
On Mon, Jul 10, 2017 at 1:03 PM, Richard Eisenberg
wrote: This OtherEquality is actually a tad bit more general, given that GHC can't (currently) reorder type indices. But would anyone take advantage of the generality? I tend to doubt it... Richard
On Jul 10, 2017, at 12:20 PM, David Feuer
wrote: There's another version of heterogeneous equality that takes its arguments in the other order. I'm not sure if this is generally useful enough to want to include.
-- (:~~:) :: forall j k. j -> k -> *
data OtherEquality :: forall j. j -> forall k. k -> Type where OtherRefl :: OtherEquality a a
On Mon, Jul 10, 2017 at 11:24 AM, Ryan Scott
wrote: I also agree that we should keep HRefl a distinct name, and moreover, we should keep :~: and :~~: as distinct datatypes. I'm also on-board with the idea that we should introduce a separate Data.Type.Equality.Hetero module that reexports :~~: and defines heterogeneous counterparts for sym, trans, etc. from Data.Type.Equality. I don't have a strong opinion on how they should be named (e.g., sym vs. hsym).
Ryan S.
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries

Not sure. You can go back and forth between normal Leibnizian equality and :~: in Haskell. The notion of an Equality in lens can be seen as a Leibnizian equality, just with an extra set of parameters and encoding it that way lets us compose them with (.) from the Prelude. I suppose if you stripped off your newtype you could do the same here. Other than that? If we didn't have ~ or ~~ already it'd bring something to the table as it provides you some ability to talk about type equality without them in your language. But we do have them. Sent from my iPhone
On Jul 10, 2017, at 2:18 PM, David Feuer
wrote: That's the idea I was after. Is it good for anything?
On Jul 10, 2017 2:06 PM, "Edward Kmett"
wrote: Sent from my iPad
On Jul 10, 2017, at 1:11 PM, David Feuer
wrote: Well, I came up with another notion of heterogeneous equality (much, much more limited in practice):
newtype HEqual (a :: j) (b :: k) = HEqual (forall (f :: forall l. l -> Type). f a -> f b)
This is "heterogeneous Leibnizian equality".
Implementing
fromHEqual :: forall j k (a :: j) (b :: k). HEqual a b -> a :~~: b seems to require something like OtherEquality.
I'm not sure what you mean about not being able to reorder type indices. OtherEquality can also be defined as a newtype around (:~~:):
newtype OtherEquality :: forall j. j -> forall k. k -> Type where OtherEquality :: a :~~: q -> OtherEquality a q
But perhaps you mean it's more convenient than :~~:?
On Mon, Jul 10, 2017 at 1:03 PM, Richard Eisenberg
wrote: This OtherEquality is actually a tad bit more general, given that GHC can't (currently) reorder type indices. But would anyone take advantage of the generality? I tend to doubt it... Richard
On Jul 10, 2017, at 12:20 PM, David Feuer
wrote: There's another version of heterogeneous equality that takes its arguments in the other order. I'm not sure if this is generally useful enough to want to include.
-- (:~~:) :: forall j k. j -> k -> *
data OtherEquality :: forall j. j -> forall k. k -> Type where OtherRefl :: OtherEquality a a
On Mon, Jul 10, 2017 at 11:24 AM, Ryan Scott
wrote: I also agree that we should keep HRefl a distinct name, and moreover, we should keep :~: and :~~: as distinct datatypes. I'm also on-board with the idea that we should introduce a separate Data.Type.Equality.Hetero module that reexports :~~: and defines heterogeneous counterparts for sym, trans, etc. from Data.Type.Equality. I don't have a strong opinion on how they should be named (e.g., sym vs. hsym).
Ryan S.
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries

Why not define (:~~:) in Data.Type.Equality.Heterogeneous in the first place instead of defining it in Data.Type.Equality and reexporting it from Data.Type.Equality.Heterogeneous? All the best, Wolfgang Am Montag, den 10.07.2017, 08:24 -0700 schrieb Ryan Scott:
I also agree that we should keep HRefl a distinct name, and moreover, we should keep :~: and :~~: as distinct datatypes.
I'm also on-board with the idea that we should introduce a separate Data.Type.Equality.Hetero module that reexports :~~: and defines heterogeneous counterparts for sym, trans, etc. from Data.Type.Equality. I don't have a strong opinion on how they should be named (e.g., sym vs. hsym).
Ryan S.
participants (5)
-
David Feuer
-
Edward Kmett
-
Richard Eisenberg
-
Ryan Scott
-
Wolfgang Jeltsch