(by @andrestaltz)
If you prefer to watch video tutorials with live-coding, then check out this series I recorded with the same contents as in this article: Egghead.io - Introduction to Reactive Programming.
| object TypeclasseDemo { | |
| // The parts of the type class pattern are: | |
| // | |
| // 1. the "type class" itself -- a trait with a single type parameter; | |
| // | |
| // 2. type class "instances" for each type we care about, | |
| // each marked with the `implicit` keyword; | |
| // | |
| // 3. an "interface" to the type class -- one or more methods |
| /* | |
| * Copyright 2015 Databricks, Inc. | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may | |
| * not use this file except in compliance with the License. You may obtain | |
| * a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software |
(by @andrestaltz)
If you prefer to watch video tutorials with live-coding, then check out this series I recorded with the same contents as in this article: Egghead.io - Introduction to Reactive Programming.
| class A | |
| class A2 extends A | |
| class B | |
| trait M[X] | |
| // | |
| // Upper Type Bound | |
| // | |
| def upperTypeBound[AA <: A](x: AA): A = x |