File: lift-and-unlift.scala

package info (click to toggle)
scala 2.9.2%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 67,252 kB
  • ctags: 6,602
  • sloc: java: 27,488; xml: 4,412; python: 2,297; sh: 734; makefile: 16; ansic: 6
file content (27 lines) | stat: -rw-r--r-- 593 bytes parent folder | download | duplicates (2)
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
27
import Function.unlift

object Test {
  def evens1(x: Int) = if (x % 2 == 0) Some(x) else None
  def evens2: PartialFunction[Int, Int] = {
    case x if x % 2 == 0  => x
  }
  
  def main(args: Array[String]): Unit = {
    val f1 = evens1 _
    val f2 = evens2.lift
    
    assert(1 to 10 forall (x => f1(x) == f2(x)))
    
    val f3 = unlift(f1)
    val f4 = unlift(f2)
    
    assert(1 to 10 forall { x =>
      if (!f3.isDefinedAt(x)) !f4.isDefinedAt(x)
      else f3(x) == f4(x)
    })
    
    assert(f1 eq f3.lift)
    // Hmm, why is this not true:
    // assert(f2 eq f4.lift)
  }
}