Scalaz adds support for unboxed
tagged types via the scalaz.Tag
module.
build.sbt:
+= "org.scalaz" %% "scalaz-core" % "7.2.8" libraryDependencies
search.scala:
import scalaz._
import Tag._
trait Needle
trait Haystack
object Search {
def apply(n: String @@ Needle, h: String @@ Haystack): Boolean =
unwrap(h) contains unwrap(n)
}
object Main extends App {
val n = Tag[String,Needle]("needle")
val h = Tag[String,Haystack]("This haystack is nothing but needles!")
println(Search(n, h))
}
$ sbt run
true