学習のためOptionを自分で実装したのですが、type mismatch; が発生してしまいます

発生している問題・エラーメッセージ

該当のソースコードの"myオプションの合成"関数で"type mismatch"が発生する

[error]  found   : MyOption[C]
[error]  required: MySome[C]
[error]       o2.map { oo2 =>
[error]              ^
[error] one error found

該当のソースコード

sealed trait MyOption[+A]{
  final def map[B](f: A => B): MyOption[B] = {
    this match {
      case MyNone => MyNone
      case MySome(value) => MySome(f(value))
    }
  }

  final def flatMap[B](f: A => MySome[B]): MyOption[B] = {
    this match {
      case MyNone => MyNone
      case MySome(value) => f(value)
    }
  }
}

final case class MySome[+A](value: A) extends MyOption[A] 
final case object MyNone extends MyOption[Nothing]

// 問題の部分はここです!!!
object MyOption {
  def myオプションの合成[A, B, C](o1: MyOption[A], o2: MyOption[B])(f: (A, B) => C): MyOption[C] = {
    o1.flatMap { oo1 =>
      o2.map { oo2 =>
        f(oo1, oo2)
      }
    }
  }
}

試したこと

下記のように通常のOption型に切り替えると正常に型解決されます

def mオプションの合成[A, B, C](o1: Option[A], o2: Option[B])(f: (A, B) => C): Option[C] = {
    o1.flatMap { oo1 =>
      o2.map { oo2 =>
        f(oo1, oo2)
    }
  }
}

補足情報(FW/ツールのバージョンなど)

scalaVersion := "2.12.8"