Shapeless adds support for type
tagging via the shapeless.tag
module.
build.sbt:
++= "com.chuusai" %% "shapeless" % "2.3.3" libraryDependencies
search.scala:
import shapeless.tag
import shapeless.tag.@@
trait Needle
trait Haystack
object Search {
def apply(n: String @@ Needle, h: String @@ Haystack): Boolean =
h contains n}
object Main extends App {
val n = tag[Needle][String]("needle")
val h = tag[Haystack][String]("This haystack is nothing but needles!")
println(Search(n, h))
}
$ sbt run
true