вот именно это вы и хотите — отдельные ветви вынести в отдельные типы. кому-то было бы удобнее, если бы каждая ветка автоматически создавала тип? возможно. не факт
takeEither :: Sum [F, S, T] -> Text takeEither s = case project s of Right (F t) -> t Left s' -> case project s' of Right (S t) -> t Left s'' -> case project s'' of Right _ -> "third"