query.results.rows is an Array<Schema.Unknown> and I expect it to have a single item at this point, but I don't know so I wrap it in an Option, then I want to to decode it to a particular row type, so I do a match on the option and, if it's some it becomes the Either returned by the Schema.decode call, or if none, I turn it into an Either.left. Either.Either<never, string> | Either.Either<{...}, ParseError> so the type is the union of my branch types, and then when I map over it the value becomes never | {...} and typescript complins.left side, because my first attempt when I tried to use map most of the time resulted in me having nested Either or an Either nested in an Option which doesn't feel great. I hope this makes sense 