summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authormichelou <michelou@epfl.ch>2006-03-09 13:51:32 +0000
committermichelou <michelou@epfl.ch>2006-03-09 13:51:32 +0000
commit57edf1ab5ec40364d19a84b2db78dc284ff9dad9 (patch)
tree7231c2631cc9e49da227df38fcac7ff11c11c1a5 /docs
parent1e3992f63ab478db4e086e9d305da37ad28f3297 (diff)
downloadscala-57edf1ab5ec40364d19a84b2db78dc284ff9dad9.tar.gz
scala-57edf1ab5ec40364d19a84b2db78dc284ff9dad9.tar.bz2
scala-57edf1ab5ec40364d19a84b2db78dc284ff9dad9.zip
added file docs/examples/gadts.scala
Diffstat (limited to 'docs')
-rw-r--r--docs/examples/gadts.scala22
1 files changed, 22 insertions, 0 deletions
diff --git a/docs/examples/gadts.scala b/docs/examples/gadts.scala
new file mode 100644
index 0000000000..88e1ff9fdb
--- /dev/null
+++ b/docs/examples/gadts.scala
@@ -0,0 +1,22 @@
+package examples
+
+object gadts extends Application {
+
+ abstract class Term[T]
+ case class Lit(x: int) extends Term[int]
+ case class Succ(t: Term[int]) extends Term[int]
+ case class IsZero(t: Term[int]) extends Term[boolean]
+ case class If[T](c: Term[boolean],
+ t1: Term[T],
+ t2: Term[T]) extends Term[T]
+
+ def eval[T](t: Term[T]): T = t match {
+ case Lit(n) => n
+ case Succ(u) => eval(u) + 1
+ case IsZero(u) => eval(u) == 0
+ case If(c, u1, u2) => eval(if (eval(c)) u1 else u2)
+ }
+ Console.println(
+ eval(If(IsZero(Lit(1)), Lit(41), Succ(Lit(41)))))
+}
+