Futhark uses unification to drive its type checker, but has different logic to produce error messages!
https://futhark-lang.org/blog/2020-03-15-futhark-0.15.1-released.html
This is a question I've faced on several occasions.
miniblog.
Related Posts
Short and very accessible introduction to implementing unification, including Python sample code:
The latest Read Eval Print Love discusses rules engines!
https://leanpub.com/readevalprintlove004/read
I'm also interested to learn that Clojure has a unification library in its stdlib.