Let's have a look at the example:
def sum[T](list: Seq[T])(implicit typeClass : AddTypeClass[T]) = {
list.reduce(typeClass.add(_,_))
}
There is nothing unusual in here. Function sum needs a typeclass to perform it's operation.
Now let's express the same using context bounds:
def sum[T: AddTypeClass](list: List[T]) = {
val typeClass = implicitly[AddTypeClass[T]]
list.reduce(typeClass.add(_,_))
}
Expression [T: AddTypeClass] means: "for some T such that, there exists a type AddTypeClass[T]". This is called context bounds.
Now we just need to get hold of an instance of type AddTypeClass[T]. We can use the function implicitly from Predef.
The definition of implicitly is as follows:
def implicitly[T](implicit e: T) = e
Enjoy!
No comments:
Post a Comment