diff options
author | michelou <michelou@epfl.ch> | 2006-03-09 13:51:32 +0000 |
---|---|---|
committer | michelou <michelou@epfl.ch> | 2006-03-09 13:51:32 +0000 |
commit | 57edf1ab5ec40364d19a84b2db78dc284ff9dad9 (patch) | |
tree | 7231c2631cc9e49da227df38fcac7ff11c11c1a5 | |
parent | 1e3992f63ab478db4e086e9d305da37ad28f3297 (diff) | |
download | scala-57edf1ab5ec40364d19a84b2db78dc284ff9dad9.tar.gz scala-57edf1ab5ec40364d19a84b2db78dc284ff9dad9.tar.bz2 scala-57edf1ab5ec40364d19a84b2db78dc284ff9dad9.zip |
added file docs/examples/gadts.scala
-rw-r--r-- | docs/examples/gadts.scala | 22 |
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))))) +} + |