@jonmsterling
Discouraging users from overusing implicit arguments sounds reasonable (I am very guilty of this). I'm not convinced, however, in the edge cases where users do want to give some implicit arguments, that specifying them by position is any better than specifying them by name. Both are kinda arbitrary (especially in the presence of features like generalised variables, where the order in which variables are bound is really an implementation detail, though maybe this is a flaw in the design of generalised variables).
One idea I have wondered about is, inspired by bidirectional typechecking, allowing users to provide two implicitness-signatures for each definition: a synthesisable one and a checkable one. E.g. it would be nice to easily toggle between
refl : {A : Type} (x : A) -> x = x
and
refl : {A : Type} {x : A} -> x = x
but making A explicit is almost never desirable.
Of course in the presence of dependent types, metavariables and fancy unification, whether a particular argument is inferable is not a very local property, so this is probably overly simplistic, but I still think some approximation of it might be better than toggling all implicitness?