Source: https://scala-slick.org/talks/scalaio2014/Type-Level_Computations.pdf