[Agda-dev] Treating variables as named types
Nils Anders Danielsson
nad at cse.gu.se
Thu Jan 29 14:21:09 CET 2015
Hi,
Conor uses lots of instance arguments in "How to Keep Your Neighbours in
Order". However, his code was written using the old variant of the
instance arguments, and fails to check now. I managed to make the code
work again using some small tweaks, and wonder if we could get away with
even less:
* I replaced
record One : Set where constructor it
with
record One : Set where
instance
constructor it.
This seems fine with me.
* I replaced
_:-_ : forall {P T} -> <P P P> -> (P => T) -> T
! :- t = t
with
_:-_ : forall {P T} -> <P P P> -> (P => T) -> T
! {{prf = p}} :- t = t {{p = p}},
because "Instance search can only be used to find elements in a named
type". Similarly, in two cases I replaced a module parameter
(L : REL P)
with
(L' : REL P) (let L = Named L'),
where Named is a named type family:
data Named {P : Set} (A : REL P) : REL P where
named : forall {x} -> A x -> Named A x
Would it be possible to treat variables as named types/named type
families?
Introducing special treatment for variables can be problematic, as it
can lead to problems with subject reduction. However, in this case the
instance resolution should happen before the variables get
instantiated, so I don't think this will be a problem.
Are there any other problems, related to implementation complexity or
efficiency?
--
/NAD
More information about the Agda-dev
mailing list