We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
3.X
2.1.1
Consider the following motivating example:
import scala.util.parsing.combinator.Parsers enum Token { case A() case B() case C() } object Parser extends Parsers { override type Elem = Token def tokenA: Parser[Token.A] = ??? def tokenB: Parser[Token.B] = ??? def tokenC: Parser[Token.C] = ??? def tokenABC: Parser[Token.A | Token.B | Token.C] = tokenA | tokenB | tokenC // error }
Unfortunately the definition tokenABC doesn't compile:
tokenABC
Found: Parser[Token] Required: Parser[Token.A | Token.B | Token.C] tokenA | tokenB | tokenC
A workaround is to ascribe tokenA to the desired union type:
tokenA
def tokenABC: Parser[Token.A | Token.B | Token.C] = (tokenA: Parser[Token.A | Token.B | Token.C]) | tokenB | tokenC
However this looks unnatural and arguably not very intuitive.
If we look at the source, this is how the choice operator is defined:
def | [U >: T](q: => Parser[U]): Parser[U]
And it is now evident why the code in the above example fails to compile. The obvious change would be to update the signature to:
def | [U](q: => Parser[U]): Parser[T | U]
Which would definitely break cross compatibility and therefore wouldn't be a viable solution.
The text was updated successfully, but these errors were encountered:
No branches or pull requests
3.X
2.1.1
Consider the following motivating example:
Unfortunately the definition
tokenABC
doesn't compile:A workaround is to ascribe
tokenA
to the desired union type:However this looks unnatural and arguably not very intuitive.
If we look at the source, this is how the choice operator is defined:
And it is now evident why the code in the above example fails to compile. The obvious change would be to update the signature to:
Which would definitely break cross compatibility and therefore wouldn't be a viable solution.
The text was updated successfully, but these errors were encountered: