学習のためOptionを自分で実装したのですが、type mismatch; が発生してしまいます
発生している問題・エラーメッセージ
該当のソースコードの"myオプションの合成"関数で"type mismatch"が発生する
[error] found : MyOption[C] [error] required: MySome[C] [error] o2.map { oo2 => [error] ^ [error] one error found
該当のソースコード
scala
1sealed trait MyOption[+A]{ 2 final def map[B](f: A => B): MyOption[B] = { 3 this match { 4 case MyNone => MyNone 5 case MySome(value) => MySome(f(value)) 6 } 7 } 8 9 final def flatMap[B](f: A => MySome[B]): MyOption[B] = { 10 this match { 11 case MyNone => MyNone 12 case MySome(value) => f(value) 13 } 14 } 15} 16 17final case class MySome[+A](value: A) extends MyOption[A] 18final case object MyNone extends MyOption[Nothing] 19 20// 問題の部分はここです!!! 21object MyOption { 22 def myオプションの合成[A, B, C](o1: MyOption[A], o2: MyOption[B])(f: (A, B) => C): MyOption[C] = { 23 o1.flatMap { oo1 => 24 o2.map { oo2 => 25 f(oo1, oo2) 26 } 27 } 28 } 29} 30
試したこと
下記のように通常のOption型に切り替えると正常に型解決されます
scala
1def mオプションの合成[A, B, C](o1: Option[A], o2: Option[B])(f: (A, B) => C): Option[C] = { 2 o1.flatMap { oo1 => 3 o2.map { oo2 => 4 f(oo1, oo2) 5 } 6 } 7}
補足情報(FW/ツールのバージョンなど)
scalaVersion := "2.12.8"
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。