scalaの学習のためOptionを自分で実装したのですが、type mismatch; が発生してしまいます
学習のため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"