org.cvogt.scala.constraint
fails compilation if T is not a case class meaning this can be used as an implicit to check