Ответ 1
scala> trait Conn
defined trait Conn
scala> def ping(implicit c: Conn) = true
ping: (implicit c: Conn)Boolean
scala> def withConn[A](f: Conn => A): A = { val c = new Conn{}; f(c); /*cleanup*/ }
withConn: [A](f: Conn => A)A
scala> withConn[Boolean]( c => ping(c) )
res0: Boolean = true
scala> withConn[Boolean]{ c => implicit val c1 = c; ping }
res1: Boolean = true
scala> withConn[Boolean]( implicit c => ping )
res2: Boolean = true
Последняя строка по существу является сокращением для второго последнего.