Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object Polymorphism {
- object MixIn {
- trait Animal {
- def call: String
- }
- // mix-in trait.
- class Dog extends Animal {
- override def call: String = "ワン"
- }
- class Cat extends Animal {
- override def call: String = "ニャー"
- }
- }
- object TypeClass {
- trait Animal[A] {
- def call: String
- }
- // no mix-in.
- class Dog
- class Cat
- implicit object CallingDog extends Animal[Dog] {
- override def call: String = "ワン"
- }
- implicit object CallingCat extends Animal[Cat] {
- override def call: String = "ニャー"
- }
- def call[A: Animal](a: A) = implicitly[Animal[A]].call
- }
- }
- object Main extends App {
- Seq(
- (new MixIn.Dog).call,
- (new MixIn.Cat).call,
- TypeClass.call(new TypeClass.Dog),
- TypeClass.call(new TypeClass.Cat)
- ) foreach {
- println
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement