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