マーカートレイト

badge

マーカートレイトは、要求属性のないトレイトである。すなわち、メソッドを実装せずにImplすることができる。 要求属性がないと意味がないように思えるが、そのトレイトに属しているという情報が登録されるので、パッチメソッドを使ったり、コンパイラが特別扱いしたりできる。

すべてのマーカートレイトはMarkerトレイトに包摂される。 標準で提供されているLightはマーカートレイトの一種である。

Light = Subsume Marker
Person = Class {.name = Str; .age = Nat} and Light
M = Subsume Marker

MarkedInt = Inherit Int, Impl := M

i = MarkedInt.new(2)
assert i + 1 == 2
assert i in M

マーカークラスはExcluding引数で外すことも可能である。

NInt = Inherit MarkedInt, Impl := N, Excluding: M