A Practical Introduction to Haskell GADTs by Richard Eisenberg
youtube.com