> it became harder to tell types from value-level expressions at a glance
Font differences seem like a more natural way to distinguish those.
> Do you prefer this?
>
> id :: domain ~ codomain => domain -> codomain ...
Lol no.
Maybe a good solution would be, rather than longer names, some automated way for a user to ask whether a type variable like 'a' carries any semantics, or is truly free to be anything.
If I'm learning a library from the top down, it's not (as far as I can remember) a problem. But sometimes one library uses a single function buried deep in another library. In those situations, the current status-quo recipe, "just flail around (reading documentation or manually unifying types) until you get it," seems improvable.
But if y'all gurus don't think it's a big deal, I'll take your word for it, and wait for those flailings to become instinctual.