https://devhubby.com/thread/what-does-t0-t1-t2-and-a0-mean-in-haskell