引数の値に応じて結果型が変わるメソッド Dependent method types というのがあって、引数の型に応じて結果型を変えたい場合はオーバーロードというテクニック(ここはJavaっぽいテクニック)があるけども、それだといろいろ問題があるので、代わりにMagnet Patternを使ってみてはどうか、ということをSprayのブログで紹介されている。
sealed trait CompletionMagnet { type Result def apply(): Result }
traitとtypeの組み合わせで、Magnet Patternをやってみてはどうだろうか、という話。