What does it mean to erase an argument in a type constructor? For example
data Foo : (0 _ : Nat) -> Type where
as opposed to
data Foo : Nat -> Type where
My understanding is that nothing in a type constructor is used at runtime anyway, so it's effectively always 0. I guess it also leads to the perhaps more confusing question of what would a linear argument mean in a type constructor, but that's for another day.
Idris (2) is somewhat unusual in that it allows direct pattern matching on types. Type constructors are treated as
Type's constructors.If you, say, erased
Fin's argument, then matching against aTypewithFin nwould makenerased, too.