abstract sealed case class Foop(b: Int) object Foop { def construct (r: Int): Foop = new Foop(r) {} implicit val foopMeta: Meta[Foop] = Meta[Int].nxmap(construct, _.b) }