[B, That](f: C => B ⬅️)(implicit bf: CanBuildFrom[Traversable[C],B,That])That
cannot be applied to (A => String ⬅️)
```
---
### Fix high kinds implementations
Specify it with [`M[T] <: Traversable[T]`](https://gist.github.com/cchantep/ea3d7cb6b9b2e29209dbc01c0ef83a9f/30f40ec871f3055d283b5d168e5759b29a62e7d7#file-typeclass-scala-L22) to guarantee that with `M[A]` the `Traversable` operations are parameterized with the “same” `A`.
```scala
implicit def traversableShow[
A, M[T] <: Traversable[T]](
implicit w: Show[A]): Show[M[A]] = Show[M[A]] { as =>
as.map { a: A =>
w(a)
}.mkString
}
```
… it compiles, let’s test it ... 🙏
---
### Test the high kinds implementation
First the newly implemented `traversableShow`,
```scala
scala> implicitly[Show[List[String]]].apply(List("foo"))
res: String = foo
scala> implicitly[Show[Set[String]]].apply(Set("bar"))
res: String = bar
```
… then check there is no regression for the sealed family:
```scala
scala> implicitly[Show[Member2]].apply(Member2("foo"))
res: String = Member2(foo)
scala> implicitly[Show[Family]].apply(Member2("foo"))
res: String = Family(Member2(foo))
```
---
### Finally everything is ok

---
## Some usefuls readings
- [Be friend with covariance and contravariance](http://julien.richard-foy.fr/blog/2013/02/21/be-friend-with-covariance-and-contravariance/); Julien Richard-Foy (21/2/2013)
- [SI-2509](https://issues.scala-lang.org/browse/SI-2509): Contravariance mucks with implicit resolution;
Created on issue.scala-lang.org 10/2009, updated 8/2016; Open/unresolved
- [End the blight of contravariance](https://groups.google.com/forum/#!topic/scala-language/ZE83TvSWpT4); Scala-language Google group (5/2012)
- [Implicit Resolution with Contravariance](https://stackoverflow.com/a/21921296); StackOverflow (2/2014)
- The [Play-JSON Pull Request](https://github.com/playframework/play-json/pull/216/) that has inspired those slides