2012-03-25 10 views
7

私は同じように見えるデータストア型クラスの束を持っています。依存するメソッドの型と型のクラス

trait FooStore[C] { 
    def create(f: FooId => Foo)(c: C): Foo 
    // update and find methods 
} 
私は物事を単純化したいと

sealed trait AR { 
    type Id 
    type Type 
} 

sealed trait FooAR extends AR { 
    type Id = FooId 
    type Type = Foo 
} 

trait DataStore[C] { 
    def create(ar: AR)(f: ar.Id => ar.Type)(c: C): ar.Type 
} 

に近い何かを得るために依存メソッドの型を使用することを望んが、私は試してみて、そのインスタンスを作成するときに

case class InMemory(foos: List[Foo]) 
object InMemory { 
    lazy val InMemoryDataStore: DataStore[InMemory] = new DataStore[InMemory] { 
    def create(ar: AR)(f: ar.Id => ar.Type)(c: InMemory): ar.Type = sys.error("not implemented") 
    } 
} 
を次のようにして

次のコンパイルエラーが発生する

object creation impossible, since method create in trait DataStore of type (ar: AR)(f: ar.Id => ar.Type)(c: InMemory)ar.Type is not defined 
    lazy val InMemoryDataStore: DataStore[InMemory] = new DataStore[InMemory] { 
                 ^
one error found 

このメソッドはDataStoreインスタンスでかなり明確に定義されているため、わかりません。エラーは何を意味し、これは可能ですか?そうでない場合は、同じことを達成する別の方法がありますか?

+0

あなたは '-Ydependent-method-types'でコンパイルしていますか? – mergeconflict

+0

@mergeconflict:はい、依存するメソッドタイプでコンパイル – purefn

答えて

7

これはScala-2.10-M2マイルストーンを使用してコンパイルされます。2.9リリース以降、一部の依存メソッドタイプのバグが修正されました。私は完全にはわからないが、おそらくthis oneがそれを作ったかもしれない。

+0

@Arjanに同意します...それは最新の2.10.0-SNAPSHOTで動作し、SI-5033は原因と思われます。 –

+0

素晴らしい!みんなありがとう! 2.9.2 RCはどうですか?私はそれを簡単にテストできる環境を持っていません。私はすぐに1つを取得する必要がありますね。 – purefn

関連する問題