Implicits Inspected and Explained @ ScalaDays 2016 Berlin

Implicits	Inspected	and
Explained
ScalaDays	2016	Berlin
Tim	Soethout	-	ING	Bank
http://blog.timmybankers.nl
Implicits	Inspected	and
Explained
ScalaDays	2016	Berlin
Tim	Soethout	-	ING	Bank
Outline:	Introduction	-	Implicits	-	Resolving	-	Type	Classes	-	Wrap	up
http://blog.timmybankers.nl
About	myself
Tim	Soethout
Functional	programmer	at	heart
Scala/FP	evangelist/trainer	inside	ING	Bank
PhD	Candidate
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
What?
Use	values	without	explicit	reference
OO:	is	a	+	has	a
Implicits	add:	is	viewable	as	a
Loose	Coupling,	Tight	Cohesion
Examples
Akka
Futures
trait ScalaActorRef
def !(message: Any)(implicit sender: ActorRef = Actor.noSender): Unit = ...
}
actorRef ! SomeMessage("text")
object Future {
def apply[T](body: =>T)(implicit executor: ExecutionContext): Future[T] = ...
}
Future {
doExpensiveComputation()
}
Examples	(2)
Collections
trait TraversableOnce[+A] {
def sum[B >: A](implicit num: Numeric[B]): B = ...
}
List(1,2,3).sum
res0: Int = 6
Examples	(3)
Finagle
@implicitNotFound("Builder is not fully configured: Cluster: ${HasCluster}, Codec: ${HasCodec},
HostConnectionLimit: ${HasHostConnectionLimit}")
private[builder] trait ClientConfigEvidence[HasCluster, HasCodec, HasHostConnectionLimit]
class ClientBuilder[Req, Rep, HasCluster, HasCodec, HasHostConnectionLimit] private[finagle](...) {
def build()(
implicit THE_BUILDER_IS_NOT_FULLY_SPECIFIED_SEE_ClientBuilder_DOCUMENTATION:
ClientConfigEvidence[HasCluster, HasCodec, HasHostConnectionLimit]
): Service[Req, Rep] = ...
}
val builder: ClientBuilder[Request, Response, Yes, Yes, Nothing] =
ClientBuilder()
.codec(Http())
.hosts("twitter.com:80")
builder.build()
Error:(24, 15) Builder is not fully configured: Cluster: com.twitter.finagle.builder.ClientConfig.Yes,
Codec: com.twitter.finagle.builder.ClientConfig.Yes, HostConnectionLimit: Nothing
builder.build()
^
Implicits	enable
DSLs
Type	evidence
Reduce	verbosity
Type	classes
Dependency	Injection	at	Compile	time
Extending	libraries
But	beware
Resolution	rules	can	be	difficult
Automatic	conversions
Do	not	overuse
Demo
Implicit	conversions	(a.k.a.	Implicit	views)
Implicit	parameters
Implicit	classes
Implicit	declarations
implicit def a2B(a : A) : B = ...
def method(implicit x : Int) = ...
implicit class X(y: Int)
implicit val x = ...
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Scoping
Odersky	Explains
Lookup	precedence:
1.	 By	name	only,	without	any	prefix
2.	 In	"implicit	scope":
companion/package	object	of
the	source	type
its	parameters	+	supertype	and	supertraits
Demo
Scoping	and	resolving
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Typeclass	uses
Ad-hoc	polymorphism
Extension	of	libraries
trait Numeric[T] extends Ordering[T] {
def plus(x: T, y: T): T
def minus(x: T, y: T): T
def times(x: T, y: T): T
...
}
Demo
Typeclass	for	JSON	Serialisation
Naive	with	subtyping
Typeclass	+	improvements
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Implicits Inspected and Explained @ ScalaDays 2016 Berlin
Recap
Implicits	are	powerful
Be	careful	with	conversions
Implicit	precedence:	first	look	local,	then	in	companion/package	object
Typeclasses	to	extend	libraries
Recap
Implicits	are	powerful
Be	careful	with	conversions
Implicit	precedence:	first	look	local,	then	in	companion/package	object
Typeclasses	to	extend	libraries
Questions?
Tim	Soethout	@	ScalaDays	2016	Berlin
References
	/	
Scala	documentation:
Book:	
Blog	
,	special	thanks	to	@Ichoran	and	@som-snytt
,	for	the	demo	slides
http://blog.timmybankers.nl
Slides Code
Java	Converters
Finding	Implicits
Scala	In	Depth
Effective	Scala
All	Things	Runnable
Scala	Gitter	channel
REPLesent
1 of 118

More Related Content

What's hot(14)

linq with Examplslinq with Exampls
linq with Exampls
Jitendra Gangwar357 views
05 functional programming05 functional programming
05 functional programming
Victor Matyushevskyy326 views
On Scala Slides - OSDC 2009On Scala Slides - OSDC 2009
On Scala Slides - OSDC 2009
Michael Neale510 views
Migrating Objective-C to SwiftMigrating Objective-C to Swift
Migrating Objective-C to Swift
Elmar Kretzer360 views
A Journey From Objective C to Swift - ChromeinfotechA Journey From Objective C to Swift - Chromeinfotech
A Journey From Objective C to Swift - Chromeinfotech
ChromeInfo Technologies2.5K views
A Deep Dive into JavascriptA Deep Dive into Javascript
A Deep Dive into Javascript
Tiang Cheng1.7K views
Creating classes in code (Syntax)Creating classes in code (Syntax)
Creating classes in code (Syntax)
ihtesham_hussain45 views
Introduction to php   4Introduction to php   4
Introduction to php 4
pctechnology283 views
JavaScript operatorsJavaScript operators
JavaScript operators
Vivek Kumar57 views
Advanced PHP SimplifiedAdvanced PHP Simplified
Advanced PHP Simplified
Mark Niebergall1.5K views
Introduction to f#Introduction to f#
Introduction to f#
mjyeaney305 views

Similar to Implicits Inspected and Explained @ ScalaDays 2016 Berlin

Scala and SpringScala and Spring
Scala and SpringEberhard Wolff
9K views52 slides

Similar to Implicits Inspected and Explained @ ScalaDays 2016 Berlin(20)

Implicits Inspected and ExplainedImplicits Inspected and Explained
Implicits Inspected and Explained
Tim Soethout494 views
Oop2010 Scala Presentation StalOop2010 Scala Presentation Stal
Oop2010 Scala Presentation Stal
Michael Stal2.2K views
Functional programming in C++Functional programming in C++
Functional programming in C++
Alexandru Bolboaca781 views
Javazone 2010-lift-framework-publicJavazone 2010-lift-framework-public
Javazone 2010-lift-framework-public
Timothy Perrett1.1K views
Scala and SpringScala and Spring
Scala and Spring
Eberhard Wolff9K views
Introduction to Spark MLIntroduction to Spark ML
Introduction to Spark ML
Holden Karau2K views
Angular 2 Essential Training Angular 2 Essential Training
Angular 2 Essential Training
Patrick Schroeder4K views
What`s New in Java 8What`s New in Java 8
What`s New in Java 8
Mohsen Zainalpour1.3K views
Dublin Core Basic Syntax TutorialDublin Core Basic Syntax Tutorial
Dublin Core Basic Syntax Tutorial
Eduserv Foundation5.7K views
Oop javaOop java
Oop java
Minal Maniar1.9K views
Applicative Functor - Part 2Applicative Functor - Part 2
Applicative Functor - Part 2
Philip Schwarz904 views
Project Lambda: To Multicore and BeyondProject Lambda: To Multicore and Beyond
Project Lambda: To Multicore and Beyond
Dmitry Buzdin1.1K views

Recently uploaded(20)

Headless JS UG Presentation.pptxHeadless JS UG Presentation.pptx
Headless JS UG Presentation.pptx
Jack Spektor5 views
DevsRankDevsRank
DevsRank
devsrank78610 views
Unleash The MonkeysUnleash The Monkeys
Unleash The Monkeys
Jacob Duijzer7 views
Advanced API Mocking TechniquesAdvanced API Mocking Techniques
Advanced API Mocking Techniques
Dimpy Adhikary17 views

Implicits Inspected and Explained @ ScalaDays 2016 Berlin