Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sealed trait Data
- case class StringData(string: String) extends Data
- case class IntData(int: Int) extends Data
- trait Reader[A] {
- def read(data: Data): A
- }
- implicit val stringReader: Reader[String] = {
- case StringData(string) => string
- case _ => sys.error("not a string")
- }
- implicit val intReader: Reader[Int] = {
- case IntData(int) => int
- case _ => sys.error("not an int")
- }
- implicit def fromData[A: Reader](data: Data): A =
- implicitly[Reader[A]].read(data)
- val str: String = StringData("foo")
- val int: Int = IntData(420)
Add Comment
Please, Sign In to add comment