Exploring Type-Level Programming in Scala