

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

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

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

[code]

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

### 該当のソースコード

[code]

    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)
          }
        }
      }
    }
    
    
[/code]

### 試したこと

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

[code]

    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)
        }
      }
    }
    
[/code]

### 補足情報（FW/ツールのバージョンなど）

scalaVersion := "2.12.8"


CC BY-SA 4.0
2019-06-09T10:30:52.927
55652
2019-06-09T10:30:52.927
34649
question
scala
scalaの学習のためOptionを自分で実装したのですが、type mismatch; が発生してしまいます