As the other answers explained, it is about how and where the variable t is related. That is, when you write:
emptyListOfOrds : Ord t => (t : Type) -> List t
The developer will see that 't' is unconnected at the point at which it is used in Ord t and therefore binds it implicitly:
emptyListOfOrds : {t : Type} -> Ord t => (t : Type) -> List t
So, what would you like to say, it's something like:
emptyListOfOrds : (t : Type) -> Ord t => List t
To bind t to a class type restriction, and therefore it appears in the region when Ord t appears. Unfortunately, this syntax is not supported. I see no reason why this syntax should not be supported, but currently it is not.
You can still implement what you want, but it's terrible, I'm afraid:
Since classes are first-class, you can specify them as regular arguments:
emptyListOfOrds : (t : type) -> Ord t -> List t
Then you can use the special %instance syntax to find the default instance when calling emptyListOfOrds :
v'' = emptyListOfOrds Nat %instance
Of course, you really don't want to do this on every call site, so you can use the default implicit argument to call the search procedure for you:
emptyListOfOrds : (t : Type) -> {default %instance x : Ord t} -> List t v'' = emptyListOfOrds Nat
Syntax default val x : T populate the implicit argument x with the default value val if no other value is explicitly specified. Providing %instance as the default value is pretty much identical to what happens with class constraints, and in fact we could probably change the syntax implementation of Foo x => to do just that ... I think the only reason which I have not been to, is that the default arguments did not exist when I first introduced class classes.