Skip to content

Instantly share code, notes, and snippets.

@bvenners
Last active August 29, 2015 14:05
Show Gist options
  • Save bvenners/67cb4e8c0b285ca99fa3 to your computer and use it in GitHub Desktop.
Save bvenners/67cb4e8c0b285ca99fa3 to your computer and use it in GitHub Desktop.
Getting a Scala compiler error when needed typeclass coherency is missing
scala> import org.scalactic._
import org.scalactic._
scala> val lower = EquiSets[String](StringNormalizations.lowerCased.toHashingEquality)
lower: org.scalactic.EquiSets[String] = EquiSets(NormalizingHashingEquality(lowerCased))
scala> val trimmed = EquiSets[String](StringNormalizations.trimmed.toHashingEquality)
trimmed: org.scalactic.EquiSets[String] = EquiSets(NormalizingHashingEquality(trimmed))
scala> val hiho = lower.EquiSet("hi", "ho")
hiho: lower.EquiSet = EquiSet(hi, ho)
scala> hiho + "HI"
res0: lower.EquiSet = EquiSet(hi, ho)
scala> hiho + "Hi"
res1: lower.EquiSet = EquiSet(hi, ho)
scala> val hihoha = hiho + "ha"
hihoha: lower.EquiSet = EquiSet(hi, ho, ha)
scala> val HIHO = lower.EquiSet("HI", "HO")
HIHO: lower.EquiSet = EquiSet(HI, HO)
scala> HIHO + "hi"
res2: lower.EquiSet = EquiSet(HI, HO)
scala> HIHO + "Hi"
res3: lower.EquiSet = EquiSet(HI, HO)
scala> HIHO union hihoha
res4: lower.EquiSet = EquiSet(HI, HO, ha)
scala> hihoha union HIHO
res5: lower.EquiSet = EquiSet(hi, ho, ha)
scala> val bilbo = trimmed.EquiSet("bil", "bo")
bilbo: trimmed.EquiSet = EquiSet(bil, bo)
scala> bilbo + " bo "
res6: trimmed.EquiSet = EquiSet(bil, bo)
scala> bilbo + " bil "
res7: trimmed.EquiSet = EquiSet(bil, bo)
scala> val baggins = trimmed.EquiSet(" bag", "gins ")
baggins: trimmed.EquiSet = EquiSet( bag, gins )
scala> baggins + "bag"
res8: trimmed.EquiSet = EquiSet( bag, gins )
scala> baggins + "gins"
res9: trimmed.EquiSet = EquiSet( bag, gins )
scala> bilbo union baggins
res10: trimmed.EquiSet = EquiSet(bil, bo, bag, gins )
scala> val bilboBaggins = trimmed.EquiSet(" bil ", " bo", " Baggins ")
bilboBaggins: trimmed.EquiSet = EquiSet( bil , bo, Baggins )
scala> bilbo union bilboBaggins
res11: trimmed.EquiSet = EquiSet(bil, bo, Baggins )
scala> bilboBaggins union bilbo
res12: trimmed.EquiSet = EquiSet( bil , bo, Baggins )
scala> bilbo union hiho
<console>:24: error: type mismatch;
found : lower.EquiSet
required: trimmed.EquiSet
bilbo union hiho
^
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment