File: gadts2.scala

package info (click to toggle)
scala 2.3.0-1.1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 14,000 kB
  • ctags: 325
  • sloc: xml: 1,772; sh: 1,248; java: 390; makefile: 36
file content (26 lines) | stat: -rw-r--r-- 547 bytes parent folder | download
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
object Test{

abstract class Number
case class Int(n: int) extends Number
case class Double(d: double) extends Number

trait Term[+a]
case class Cell[a](var x: a) extends Term[a]
final case class NumTerm(val n: Number) extends Term[Number]


def f[a](t:Term[a], c:Cell[a]): unit = 
  t match {  
    case NumTerm(n) => c.x = Double(1.0) 
  }


val x:Term[Number] = NumTerm(Int(5))

def main(args: Array[String]): unit = {
  val cell = Cell[Number](Int(6))
  Console.println(cell)
  f[Number](new NumTerm(Int(5)), cell)
  Console.println(cell)
}
}