>>381
それは使い方間違っとるがな。正しくはこう。

class Foo
abstract class 親型 { type Hoge; def fuga(hoge: Hoge) }
class 子型 extends 親型 { type Hoge = Foo; def fuga(hoge: Hoge){} }
val a: 親型 { type Hoge = Foo } = new 子型 // { type Hoge = Foo }の部分が必要
a fuga new Foo// コンパイル通る

というのはともかく、理論的にはabstract typeはGenericsと機能的には少なくとも同等(のはず)。
ただ、多数の型パラメータ引き連れてる型を継承したいとか、型パラメータを介して複数の型が相互依存関係にある場合とか、
型パラメータの一部だけインスタンス化して他のはabstractなままにしときたいとか、abstract typeの方が便利なことも
ときどきある。たとえば、パーザコンビネータライブラリのParsersでもabstract typeが使われてるね。これは、型パラメータが
あちこちに引き回されることを考慮してのことだと思う。