Conversation

Oh right. Unfortunately, you need one more meta for the level (yeah levels are painful). In Agda, levels are handled like any other term and have type Set-omega. I *think* in Idris there's a separate metacontext just for levels.
1
1
If you don't have cumulativity, level polymorphism and level bounds, then level unification can stay dumb and simple (contrast Agda/Coq level solving), but then it's annoying to use. Why not go with type-in-type?
1
3
Idris maintains a graph of level constraints then solves later, which is a bit of a pain. For a programming language (rather than theorem prover) I don't think type-in-type loses enough to worry about. Though others may argue with this...
2
6
As an interested amateur I tried to understand the theory of this topic, but could not find literature. The small amount that i found [McBride] is understandable only for professional type theorists. Please consider writing an article or giving a talk for Haskellers.
2
Are you interested in these in relation to dependent type system implementation? You can get by without unification (see Dhall), but it means you have to be more explicit. Doing stuff like `id String "hello"` can get annoying after a while.
1
Hindley Milner type inference is one common example of a type checking algorithm that uses unification/constraint solving, but the design decisions it makes don't really scale to more interesting type systems, like those with dependent types.
1