Skip to content

GADT patmat doesn't narrow class type parameters #4323

Closed
@abgruszecki

Description

@abgruszecki
scala> enum Expr[T] {
           case IExpr(value: Int) extends Expr[Int]
           case BExpr(value: Boolean) extends Expr[Boolean]

           def join(other: Expr[T]): Expr[T] = (this, other) match {
             case (IExpr(i1), IExpr(i2)) => IExpr(i1 + i2)
             case (BExpr(b1), BExpr(b2)) => BExpr(b1 & b2)
           }
         }
6 |      case (IExpr(i1), IExpr(i2)) => IExpr(i1 + i2)
  |                                     ^^^^^^^^^^^^^^
  |                                     found:    Expr[Int]
  |                                     required: Expr[T]
  |
7 |      case (BExpr(b1), BExpr(b2)) => BExpr(b1 & b2)
  |                                     ^^^^^^^^^^^^^^
  |                                     found:    Expr[Boolean]
  |                                     required: Expr[T]
  |

This is similar to an old issue where class/trait parameters aren't narrowed.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions