We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # 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
Uh oh!
There was an error while loading. Please reload this page.
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: