Last active
August 20, 2016 22:46
-
-
Save bryce-anderson/177815a211fccbac0265a5cdb067a5be to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sealed trait HeaderKey { | |
type HeaderT <: Parsed[_] | |
def go(t: HeaderT): Unit = () | |
def name: String | |
} | |
/* | |
trait Header { | |
def name: String | |
} | |
*/ | |
trait Parsed[T <: Parsed[T]] { self: T => | |
final type MyHeaderKey = HeaderKey { type HeaderT = T } | |
def key: MyHeaderKey | |
def name: String= key.name | |
def parsed: this.type = this | |
} | |
object ThisKey extends HeaderKey { | |
type HeaderT = ThisHeader | |
def name = "ThisHeader" | |
} | |
case class ThisHeader(value: String) extends Parsed[ThisHeader] { | |
def key = ThisKey | |
} | |
object OtherKey extends HeaderKey { | |
type HeaderT = OtherHeader | |
def name = "OtherHeader" | |
} | |
case class OtherHeader(value: String) extends Parsed[ThisHeader] { | |
// def key = ThisKey // Fails to compile!!! | |
def key = OtherKey | |
} | |
object Main { | |
def main(args: Array[String]): Unit = { | |
println("Hello, world!") | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment