баловство со скалой
Mar. 13th, 2016 03:50 pmscala> sealed trait Nat defined trait Nat scala> case object Z extends Nat { override def toString = "0" } defined module Z scala> case class S(n:Nat) extends Nat { override def toString = (n.toString.toInt + 1).toString } defined class S scala> def pred(n:Nat) = n match { | case Z => Z | case S(x) => x | } pred: (n: Nat)Nat scala> pred(S(S(S(S(Z))))) res3: Nat = 3