@@ -12,6 +12,8 @@ trait Show[-T] {
1212 * default instances in this object
1313 */
1414object Show {
15+ type =!= [A , B ] = implicits.Not [=:= [A , B ]]
16+
1517 private [this ] val defaultShow : Show [Any ] = new Show [Any ] {
1618 def show (x : Any ) = x.toString
1719 }
@@ -71,11 +73,7 @@ object Show {
7173 }) + " '"
7274 }
7375
74- implicit val nothingShow : Show [Nothing ] = new Show [Nothing ] {
75- def show (x : Nothing ) = ???
76- }
77-
78- implicit def showList [T ](implicit st : Show [T ]): Show [List [T ]] = new Show [List [T ]] {
76+ implicit def showList [T ](implicit st : Show [T ], ev : T =!= Nothing ): Show [List [T ]] = new Show [List [T ]] {
7977 def show (xs : List [T ]) =
8078 if (xs.isEmpty) " List()"
8179 else " List(" + xs.map(_.show).mkString(" , " ) + " )"
@@ -85,7 +83,7 @@ object Show {
8583 def show (xs : Nil .type ) = " List()"
8684 }
8785
88- implicit def showOption [T ](implicit st : Show [T ]): Show [Option [T ]] = new Show [Option [T ]] {
86+ implicit def showOption [T ](implicit st : Show [T ], ev : T =!= Nothing ): Show [Option [T ]] = new Show [Option [T ]] {
8987 def show (ot : Option [T ]): String = ot match {
9088 case Some (t) => " Some(" + st.show(t) + " )"
9189 case none => " None"
@@ -96,7 +94,7 @@ object Show {
9694 def show (n : None .type ) = " None"
9795 }
9896
99- implicit def showMap [K ,V ](implicit sk : Show [K ], sv : Show [V ]): Show [Map [K ,V ]] = new Show [Map [K ,V ]] {
97+ implicit def showMap [K ,V ](implicit sk : Show [K ], sv : Show [V ], ev1 : K =!= Nothing , ev2 : V =!= Nothing ): Show [Map [K ,V ]] = new Show [Map [K ,V ]] {
10098 def show (m : Map [K , V ]) =
10199 " Map(" + m.map { case (k, v) => sk.show(k) + " -> " + sv.show(v) } .mkString (" , " ) + " )"
102100 }
0 commit comments