Skip to content

Instantly share code, notes, and snippets.

@andyscott
Created January 29, 2018 23:50
Show Gist options
  • Save andyscott/67a0db3d577dc680d8e8a0e5266f7a1c to your computer and use it in GitHub Desktop.
Save andyscott/67a0db3d577dc680d8e8a0e5266f7a1c to your computer and use it in GitHub Desktop.
object Evidence extends App {
class Foo[A]
class Bar[A]
class Zed[A]
// FirstK will find the first available evidence for entries in a TListK
{
implicit val zedForString: Zed[String] = new Zed[String]
assert(FirstK[Foo :: Bar :: Zed :: TNilK, String].value.value == zedForString)
{
implicit val barForString: Bar[String] = new Bar[String]
assert(FirstK[Foo :: Bar :: Zed :: TNilK, String].value.value == barForString)
assert(FirstK[Foo :: Zed :: Bar :: TNilK, String].value.value == zedForString)
{
implicit val fooForString: Foo[String] = new Foo[String]
assert(FirstK[Foo :: Bar :: Zed :: TNilK, String].value.value == fooForString)
assert(FirstK[Bar :: Foo :: Zed :: TNilK, String].value.value == barForString)
assert(FirstK[Zed :: Bar :: Foo :: TNilK, String].value.value == zedForString)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment