aboutsummaryrefslogtreecommitdiff
path: root/benchmarks/2.12-tl/src/adt.scala
blob: 69dbae0e2b83e1298044b4b77fe4ff96f3577d6c (plain) (blame)
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package adt

sealed trait Tree
case class Leaf(value: String) extends Tree
case class Branch(left: Tree, right: Tree) extends Tree

sealed trait GTree[+T]
case class GLeaf[+T](value: String) extends GTree[T]
case class GBranch[+T](left: GTree[T], right: GTree[T]) extends GTree[T]

sealed trait Entity

case class Company(name: String) extends Entity
case class Human(name: String, age: Int) extends Entity
case class Address(line1: String, occupant: Human)

sealed trait Alphabet

case class Greek(άλφα: Letter,
                 βήτα: Letter,
                 γάμα: Letter,
                 δέλτα: Letter,
                 έψιλον: Letter,
                 ζήτα: Letter,
                 ήτα: Letter,
                 θήτα: Letter)
    extends Alphabet

case class Cyrillic(б: Letter, в: Letter, г: Letter, д: Letter, ж: Letter, з: Letter)
    extends Alphabet

case class Latin(a: Letter,
                 b: Letter,
                 c: Letter,
                 d: Letter,
                 e: Letter,
                 f: Letter,
                 g: Letter,
                 h: Letter,
                 i: Letter,
                 j: Letter,
                 k: Letter,
                 l: Letter,
                 m: Letter,
                 n: Letter,
                 o: Letter,
                 p: Letter,
                 q: Letter,
                 r: Letter,
                 s: Letter,
                 t: Letter,
                 u: Letter,
                 v: Letter)
    extends Alphabet

case class Letter(name: String, phonetic: String)
case class Country(name: String, language: Language, leader: Person, existence: DateRange)
case class Language(name: String, code: String, alphabet: Alphabet)
case class Person(name: String, dateOfBirth: Date)
case class Date(year: Int, month: Month, day: Int)
case class DateRange(from: Date, toDate: Date)

sealed trait Month
case object Jan extends Month
case object Feb extends Month
case object Mar extends Month
case object Apr extends Month
case object May extends Month
case object Jun extends Month
case object Jul extends Month
case object Aug extends Month
case object Sep extends Month
case object Oct extends Month
case object Nov extends Month
case object Dec extends Month