algebraic Algebraic type with pattern match TODO recursive type (like std.variant.algebraic's This) make non-exhaustive patterns a compile error, instead of runtime error make code more readable with less string mixin document and example