You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
namespace SessionTypes.Binary
{
public abstract class Choice<L, R> where L : SessionType where R : SessionType
{
internal Choice() { }
}
public sealed class Left<L, R> : Choice<L, R> where L : SessionType where R : SessionType
{
}
public sealed class Right<L, R> : Choice<L, R> where L : SessionType where R : SessionType
{
}
}
しかしダウンキャストのために型をパラメータ含めて書く必要がある。
switch (c2.Follow())
{
case Left<Respond<int, Close>, Respond<string, Close>> left:
break;
case Right<Respond<int, Close>, Respond<string, Close>> right:
break;
}
非継続渡しの消極的選択メソッドを実装したい。
分岐先を表すコンストラクタと分岐先のセッションをもつバリアントを用意するのが理想。
Choice <a, b> = Left of a | Right of b
コンスタントをinternalにした抽象クラスを用いると、派生クラスの作成を制限できる。
バリアントの代わりとなる。
しかしダウンキャストのために型をパラメータ含めて書く必要がある。
非継続渡しの消極的選択メソッドとFluent APIをあわせると、名前変えを抑えつつ手続き的な制御構造と親和に書けるので、需要は大きい。
もっと思考を要する。
The text was updated successfully, but these errors were encountered: