Zulip Chat Archive
Stream: new members
Topic: How to define a field of a structure to have type class
Rui Liu (Dec 13 2020 at 01:09):
Can I somehow define a field of a structure to have particular type class(es)?
Alex J. Best (Dec 13 2020 at 02:09):
Can you give an example of what you want? I'm not sure what you mean
Rui Liu (Dec 13 2020 at 12:54):
Here's an example:
structure T :=
mk :: (a: Type) (b : a)
def f {t: T}: bool := ite (t.b = t.b) tt ff
This code fails to compile and we need to explicitly decorate with type class decidable_eq
.
structure T :=
mk :: (a: Type) (b : a)
def f {t: T} [h: decidable_eq t.a]: bool := ite (t.b = t.b) tt ff
This is a lot of boilerplate if you have a lot of functions and you need to decorate all of them. What I want is something like this that decorates the field a
as a type with decidable_eq
class globally:
structure T :=
mk :: (a: Type) [h: decidable_eq a] (b : a)
def f {t: T} : bool := ite (t.b = t.b) tt ff
However this doesn't compile, so what's the correct way to do it?
Kevin Buzzard (Dec 13 2020 at 15:02):
Add the missing instance after the definition of the structure
Kevin Buzzard (Dec 13 2020 at 15:03):
Unrelated -- it's hard to imagine the unifier ever being able to figure out t -- maybe round brackets would be better
Rui Liu (Dec 13 2020 at 20:39):
That works!
Eric Wieser (Dec 13 2020 at 20:58):
Shorter to write attribute [instance] T.h
, which I think also works
Last updated: Dec 20 2023 at 11:08 UTC