struct Left[E] { error E } struct Right[T] { inner T } type Either[T, E] = Left[E] | Right[T] fn works(v []Either[int, int]) { first := v[0] match first { Left[int] { println(first.error) } else {} } } fn doesntwork(v []Either[int, int]) { match v[0] { Left[int] { println(v[0].error) } else {} } } fn main() {}