The main way to do what you want would be to push your booleans to the type domain by wrapping them in Val (but then there’s no need for the Enum) or just constructing your own True/False singleton types. This is what Static.jl does.
(I’d just quickly caution that you should not follow this approach unless you know for sure that all input types (i.e. values here) are known statically - otherwise everything will be horribly type-unstable)
I think I was also having some problems with unicode…
Now working OK. I’m happy with the type and the function, it is a clear expression of xor.
> @enum 𝔹 zero one
> ⊻(a::𝔹, b::𝔹) = a == b ? zero : one
⊻ (generic function with 1 method)
> @show (zero ⊻ one, one ⊻ one)
(zero ⊻ one, one ⊻ one) = (one, zero)