http://adriaanm.github.io/files/higher.pdf
https://www.atlassian.com/blog/archives/scala-types-of-a-higher-kind