Make it private for anybody but As
object WorkSheet1 {
object A {
def apply(s: String, huh: Boolean = false): A = A(s)
}
case class A private[A](s: String)
val a = A("Oh, Hai", false)
}
I added false to solve ambiguity between object apply and case class constructor which is publicly visible.