I'm more familiar with F#, so I got stuck at this line:
type ('a,'b) app += List_name : 'a list -> ('a,list_name) app
I understand that app is an extensible type and this line adds a union case called List_name to the type, but the signature of List_name confuses me. If I write (List_name x) is x a list or a function?This article is pure gold. Rarely is this stuff explained so well.
[flagged]
> Thus, with type aliases, the type equality problem becomes the higher-order unification problem, which is not decidable.
I wonder how much this is a problem in practice, aside from the type-checker taking too long.