title: When does it make sense to use implicit parameters in Scala, and what may be alternative scala idioms to consider?
body: <p>Having used a Scala library that liberally exposes the reliance on implicits to the caller, I had experienced friction around this mechanism, as Scala makes it quite hard at times to debug implicit arguments, and because there's quite a bunch of places Scala would fill in values for implicit arguments from. (I could almost relate to it as "implicits hell" at one time). </p>
  
  <p>At one time in my coding, Scala "complained" an implicit value could not be matched whereas in fact there was a "collision" of implicit values each coming from a different import. </p>
  
  <p>Regardless of that perceived brittleness, it may at times feel borderline to an abuse of the context design pattern.</p>
  
  <p>Why does it make sense to have implicit parameters in Scala?
  In what scenarios would you use them and how would you avoid trouble?</p>
  
  <p>As I'm not sure the experimentation-curve and potential for other team members getting totally confused are worth it, could you possibly suggest <em>other scala idioms</em> for sharing context between a multitude of Scala functions?</p>
  
  <p>This questions is not for a specific implementation at hand, hopefully it's still a good fit for this site.</p>