abstract class Boolean{
def ifThenElse[T](t: => T,e: => T): T
def && (x: => Boolean): Boolean=ifThenElse(x,false)
...
def == (x: Boolean): Boolean=ifThenElse(x,x.unary_!)
}
object true extends Boolean{
def ifThenElse[T](t: => T,e: => T)=t
}
trait List[T]{
def isEmpty: Boolean
def head: T
def tail: List[T]
}
class Cons[T](val head: T,val tail: List[T]) extends List[T]{
def isEmpty=false
}
class Nil[T] extends List[T]{
def isEmpty=true
def head: Nothing=throw new NoSuchElementException("Nil.head")
def tail: Nothing=throw new NoSuchElementException("Nil.head")
}