右、私はラスカルにこのデータ型を持っている:ラスカルの代数データ型の継承?
data Primitive = Any() | Void() | Int();
そして、このようなことを行うことができる::私は何をしたいか
data Type = Any() | Void() | Int() | Not(Type l) | And(set[Type] es) | Or(set[Type] es);
は、このような別のタイプを定義している
Primitive p = Any();
Type d = p;
たとえば、簡略化するとPrimitive
と一致するのはType
です。このような何かを:
public Type reduce(Not(Primitive p)) = p;
現在、私が見ることができる唯一のソリューションはそうのように、それぞれの場合については、上記のルールを拡大することです:私はこれを行う方法があります推測している
public Type reduce(Not(Any)) = Any();
public Type reduce(Not(Void)) = Void();
public Type reduce(Not(Int)) = Int();
、しかし、私はまだそれを理解していない...考え?
Thanks Paul。実際、 'isPrim'マッチャーは、別の' prim'コンストラクターを使っているよりも優れています。私はそれに渦を立てます。 – redjamjar