scala

scalaコマンドによるreplとscalacコマンドでコンパイル出来るコードに違いがある?

Noneとかnil周りを自前で定義するような基本的なコードは、あまりreplで動かない?

Scala関数型デザインの本はあまりscalaコマンドぽちぽち叩く人向けではないのかもしれん。

replで通らないのは、こんなの。

package fpinscala.errorhandling

sealed trait Option[+A]
case class Some[+A](get :A) extends Option[A]
case object None extends Option[Nothing]


trait Option[+A] {
  def map[B](f: A => B) :Option[B] = {
    this match {
      case Some(a) => Some(f(a)) : Option[B]
      case _ => None
    }
  }
}

package文はreplでエラーになる。とどっかに書いてあったのでまあいい。
他はなあ。何が悪いのかエラーメッセージ見ても全く分からんわ。

<console>:21: error: constructor cannot be instantiated to expected type;
 found   : Some[A(in class Some)]
 required: Option[A(in trait Option)]
             case Some(a) => Some(f(a)) : Option[B]
                  ^

書き方がまずいらしいこと以外全く分からん。