scala/ScalaBook/chapter-03/lazy.scala
object D extends ((Double, Double) =>Double) {
def apply(x: Double,y: Double) = Math.sqrt(x*x+y*y)
}
def somemethod(f : Function2[Double, Double, Double],
x : Double, y : Double) = f(x,y)
var x = somemethod(D,3,4)
println(x)
def numsFrom (n :Int):Stream[Int] = Stream.cons(n,numsFrom (n+1))
lazy val N = numsFrom(0)
lazy val Ones: Stream[Int] = Stream.cons(1,Ones)
(N take 10).print
println("new line")
Ones take 5 print
lazy val bot: Boolean = bot
if (true || bot)
println("bot is not used")
else
println("oh, oh, bot is used")
implicit def Sum(a: Long)(implicit b: Long) = a+b
implicit val B: Long = 4
println(Sum(4))
println(Sum(5)(9))
implicit def IMP(a:Int)(implicit b:Int, c:Float, d:Double) = a+b+c+d
implicit val imp3 = 5
implicit val imp4 : Float = 6.0f
implicit val imp5 :Double = 7.0
print("IMP(0) = ")
println(IMP(0))
print("IMP(2) = ")
println(IMP(2))
print("IMP(1)(2,2,2) = ")
println(IMP(1)(2,2,2))
x = IMP(0) + IMP(1)(2,2,2)
println("===============")
println(x)