D言語でErlangベースのメッセージパッシングの受信側

ってどうやるの?と.Erlangがあのシンタックスで便利なのは,動的型付けとパターンマッチのコンビネーションだからだと勝手に思っているのだけど(プログラミングErlang買うべきか?).Erlangの場合,spawnとか使ってプロセス生成時に渡す関数にはこれと言ったシグネチャは必要なくて,recieverが受信したメッセージをパターンマッチでよしなに出来るから楽なんだけど,Walter Lispで名高いD言語は今時の関数型言語でありながらパターンマッチがないという欠点がある.
D言語らしさでいえばstatic ifがあるから

reciever(T)(T message)
{
    static if      (T == int)    foo_int(message);
    else static if (T == string) foo_string(message);
    ...
}

とかやるのかなぁ.実際渡せるレシーバーはCallableになるだろうから

class Foo
{
    void opCall(T)(T message);
}

くらいは普通に出来そう(concept ifで分岐もあり?).メッセージで送れる型を固定すれば分岐の嵐は起きないけど,その都度生成しないと行けないというのが面倒(あーでもキューとしてはやっぱりその都度生成する必要がありそう).switchがパターンマッチ相当に進化してくれれば楽なんだけども.
議論は進んでるけどプロトタイプが見れないから,どうにももやもやが晴れない.叩き台の実装とか用意されてないのだろうか?

追記

draft 4
ふむふむ.