I found an interesting scala implementation of Builder pattern, but I can't understand what a few lines mean:
  case class Built(a:Int, b:String){}
  trait Status
  trait Done extends Status
  trait Need extends Status
  class Builder[A<:Status,B<:Status] private(){
      private var built = Built(0,"")
      def setA(a0:Int)={
        built = built.copy(a=a0)
        this.asInstanceOf[Builder[Done,B]] 
      }
      def setB(b0: String) = { 
          built = built.copy(b = b0) 
          this.asInstanceOf[Builder[A,Done]] 
      }
     def result(implicit ev: Builder[A,B] <:< Builder[Done,Done]) = built 
  }
  object Builder{
    def apply() =  new Builder[Need,Need]
  }
1) What does private() mean in class Builder[A<:Status,B<:Status] private() class declaration?
2) What is the meaning of implicit ev: Builder[A,B] <:< Builder[Done,Done] in result function?
 
     
     
     
    