Scala неявно против неявных аргументов

Я новичок в Scala, и когда я смотрю на разные проекты, я вижу два стиля для работы с неявными аргументами

scala]]>def sum[A](xs:List[A])(implicit m:Monoid[A]): A = xs.foldLeft(m.mzero)(m.mappend)
sum:[A](xs:List[A])(implicit m:Monoid[A])A

а также

scala]]>def sum[A:Monoid](xs:List[A]): A ={
     val m = implicitly[Monoid[A]]
     xs.foldLeft(m.mzero)(m.mappend)
   }
sum:[A](xs:List[A])(implicit evidence$1:Monoid[A])A

По типу обеих функций они совпадают. Есть ли разница между ними? Почему вы хотите использовать неявно над неявными аргументами? В этом простом примере это звучит более многословно.

Когда я запускаю вышеупомянутое в REPL с чем-то, что не имеет неявного, я получаю следующие ошибки

с неявным параметром

<console>:11: error: could not find implicit value for parameter m: Monoid[String]

а также

с неявным и выраженным: моноид

<console>:11: error: could not find implicit value for evidence parameter of type Monoid[String]

Ответы на вопрос(1)

Ваш ответ на вопрос