Given the following trait (from this helpful shapeless talk):
scala> trait NatT[F[_], G[_]] { def apply[T](f: F[T]): G[T] } warning: there were two feature warnings; re-run with -feature for details defined trait NatT I believe this means that NatT accepts two higher-kinded parameters: F and G.
With this assumption, I tried to make an instance where F and G have type Option:
scala> case object Maybe extends NatT[Option, Option] { | override def apply(f: Option[Int]) = f | } <console>:8: error: object creation impossible, since method apply in trait NatT of type [T](f: Option[T])Option[T] is not de fined case object Maybe extends NatT[Option, Option] { ^ <console>:9: error: method apply overrides nothing. Note: the super classes of object Maybe contain the following, non final members named apply: def apply[T](f: Option[T]): Option[T] override def apply(f: Option[Int]) = f ^ How can I fix this attempt at making a Maybe instance?