Zulip Chat Archive
Stream: new members
Topic: Fields with Types implementing classes
Luis Enrique Muñoz Martín (Jul 12 2024 at 15:17):
Hi, why do the following field1 and field2 have different underlying types?
structure Ty where
Field1 : Type
Field2 {X : Type} : X
def foo : Ty := {
Field1 := Int // Works fine
Field2 := Int // Doesn't works <--
}
Ideally I would want the second field to work to be able to make something like:
structure Config where
Number {X : Type} [Add X] : X
-- Other types with other classes
def myConfig : Config := {
Number := Nat
-- Number := String will not compile
}
Yaël Dillies (Jul 12 2024 at 15:18):
Field2 {X : Type} : X means "For every type X, an element of X", while Field1 : Type means "A type"
Yaël Dillies (Jul 12 2024 at 15:19):
In other words, Field2 is a function which chooses an element of every type. Such a function does not exist, since empty types (eg Empty or False or Fin 0) exist
Yaël Dillies (Jul 12 2024 at 15:19):
I think what you want is rather
structure Config where
Number : Type
add : Add Number
Eric Wieser (Jul 12 2024 at 23:21):
Or even [add : Add Number] which will make filing it automatic
Luis Enrique Muñoz Martín (Jul 15 2024 at 07:32):
Technically speaking if
Field2 {X : Type} : X means "For every type X, an element of X"
then increasing the universe Field2 {X : Type 1} : X, X should be the type I used later to configure it? (Int)
The compiler doesn't work with it, but both sides looks pretty similar:
has type
Type : Type 1
but is expected to have type
X✝ : Type 1
Daniel Weber (Jul 15 2024 at 08:16):
What do you mean? This?
structure Config where
Field2 {X : Type 1} : X
Note that this is still an empty type -
example (c : Config) : False := PEmpty.elim c.Field2
Luis Enrique Muñoz Martín (Jul 15 2024 at 08:51):
Yes, I meant that.
With empty type, you mean it's impossible to initialize Field2 with any existent type, right?
Daniel Weber (Jul 15 2024 at 15:00):
I mean that there's no object of type Config
Last updated: May 02 2025 at 03:31 UTC