Guest User

Untitled

a guest
Jan 19th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.56 KB | None | 0 0
  1. sealed trait Data
  2. case class StringData(string: String) extends Data
  3. case class IntData(int: Int) extends Data
  4.  
  5. trait Reader[A] {
  6. def read(data: Data): A
  7. }
  8.  
  9. implicit val stringReader: Reader[String] = {
  10. case StringData(string) => string
  11. case _ => sys.error("not a string")
  12. }
  13. implicit val intReader: Reader[Int] = {
  14. case IntData(int) => int
  15. case _ => sys.error("not an int")
  16. }
  17.  
  18. implicit def fromData[A: Reader](data: Data): A =
  19. implicitly[Reader[A]].read(data)
  20.  
  21. val str: String = StringData("foo")
  22. val int: Int = IntData(420)
Add Comment
Please, Sign In to add comment