File: exhaustive_heuristics.scala

package info (click to toggle)
scala 2.11.12-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 62,924 kB
  • sloc: javascript: 28,808; java: 13,415; xml: 3,135; sh: 1,620; python: 756; makefile: 38; awk: 36; ansic: 6
file content (26 lines) | stat: -rw-r--r-- 824 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// tests exhaustivity doesn't give warnings (due to its heuristic rewrites kicking in or it backing off)
object Test {
  // List() => Nil
  List(1) match {
    case List() =>
    case x :: xs =>
  }

  // we don't look into guards
  val turnOffChecks = true
  List(1) match {
    case _ if turnOffChecks =>
  }

  // we back off when there are any user-defined extractors
  // in fact this is exhaustive, but we pretend we don't know since List's unapplySeq is not special to the compiler
  // to compensate our ignorance, we back off
  // well, in truth, we do rewrite List() to Nil, but otherwise we do nothing
  // the full rewrite List(a, b) to a :: b :: Nil, for example is planned (but not sure it's a good idea)
  List(true, false) match {
    case List(_, _, _*) =>
    case List(node, _*)  =>
    case Nil =>
  }

}