SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
Under the Hood 
of Scala Implicits 
by Alexander Podkhalyuzin 
Scala eXchange 2014
Agenda 
● How implicits work 
● How IDE can help with them 
● Possibilities to improve performance of 
compilation and IDE responsiveness
Implicits: The Beginning 
Two concepts: 
1. Implicit conversions 
2. Implicit parameters
Implicit conversions 
Still two cases: 
1. Type conversions 
2. Extension methods
Type conversions 
implicit def b2a(a: B): A = new A 
class A; class B 
val a: A = new B 
Compiler will search implicit function of type 
B => A.
Search scopes 
1. Resolve scope 
a. Declared implicits 
b. Imported implicits 
c. Implicitly imported implicits 
2. Extended scope 
a. Companion objects of parts? of B => A type.
If few implicits were found... 
class Base; object Base { 
implicit def clazz2str(c: Clazz): String = "" 
} 
class Clazz extends Base; object Clazz { 
implicit def base2str(b: Base): String = "" 
} 
val c: String = new Clazz
Performance 
If all implicits are in the resolve scope 
1. Complexity to find right one 
2. Harder to debug problems, when wrong 
implicit is chosen
Performance 
Solution: 
1. Use “Extended scope” to encapsulate 
implicits as much as possible 
2. Try to split implicits by priority
Explicit return type 
class A; class B 
def toInt(x: B): Int = 123 
def goo(x: A) = toInt(new A) 
implicit def a2b(x: A) = new B
Extension methods 
We can add new methods to existing types 
class Type 
class TypeExt { 
def foo(x: Int) = 123 
} 
implicit def extType(a: Type): TypeExt = 
new TypeExt 
(new Type).foo(1)
Algorithm... 
1. Find method without implicit conversion. 
2. All are not applicable 
a. Find such conversions, which add applicable method 
b. Choose most specific conversion of them 
3. If in (1) we found something not applicable, 
then we can’t use implicits for args 
4. We can’t choose most specific method 
among methods coming from different 
implicit conversions
Implicit classes 
For most cases we want implicit classes: 
implicit class Foo(s: String) { 
def intValue: Int = s.toInt 
}
Magnet pattern 
● Widely used in Spray routes 
● Originally was described in spray.io blog
Parameter Info problem 
With magnet pattern “Parameter Info” stops 
working in IDE, isn’t it?..
Implicit parameters 
Compiler is able to fill missing implicit 
parameter list on the call site: 
implicit val x: Int = 1 
def foo(implicit x: Int) = x + 1 
foo
Recursiveness 
The main feature, which gives us a step 
towards type-level programming: 
class Ordering[T] 
implicit val intOrdering: Ordering[Int] = null 
implicit def listOrdering[T]( 
implicit t: Ordering[T] 
): Ordering[List[T]] = null
How it works? 
Implicit parameter search is completely the 
same as Implicit conversion search, just we will 
search not only function types.
SOE... 
implicit def a(implicit s: String): Int = 1 
implicit def b(implicit i: Int): String = "1" 
Compiler is able to stop recursion. How?
Another example 
implicit def a[T](implicit t: T): List[T] = ??? 
implicit def b[T](implicit t: T): Option[T] = ??? 
implicit val s: String = ??? 
def foo(implicit l: List[Option[List[String]]]) {} 
foo //foo(a(b(a(s))))
Complexity of type 
Number of different parts of type: 
List[Int] complexity is 2 
Seq[Int, Option[String]] complexity is 4 
Top level classes are List and Seq.
Complexity of type 
To avoid SOE: 
● Have list of types to search 
● Do not add new search for some type if 
○ List contains equivalent type 
○ List contains type with same top level class and 
complexity of new type is bigger
Local type inference 
It’s not legal in Scala: 
def foo[T](x: T, y: T => String) = y(x) 
foo("text", s => s + s)
Local type inference 
Scala compiler tries to solve type parameters 
for every single parameter list. 
Solution: 
def foo[T](x: T)(y: T => String) = y(x) 
foo("text")(s => s + s)
Type inference for implicits 
So is it the same for implicit parameters?
-Xprint:typer 
It’s good when everything is ok. 
-Xprint:typer can help you to see implicits.
Implicit conversions 
In IntelliJ IDEA you can use currently available 
tool to analyze available implicit conversions.
Implicit parameters 
In IntelliJ IDEA 
● Only in correct case 
● It’s not including implicit conversions
What’s next 
● Use implicits as it’s most important feature of 
Scala language 
● Now you know almost everything about 
implicits, so use it safely 
● Choose right tools...
Thank you! 
twitter: Safela 
email: Alexander.Podkhalyuzin@jetbrains.com

Más contenido relacionado

La actualidad más candente

02. chapter 3 lexical analysis
02. chapter 3   lexical analysis02. chapter 3   lexical analysis
02. chapter 3 lexical analysis
raosir123
 

La actualidad más candente (20)

Lecture4 lexical analysis2
Lecture4 lexical analysis2Lecture4 lexical analysis2
Lecture4 lexical analysis2
 
Chapter 5 Syntax Directed Translation
Chapter 5   Syntax Directed TranslationChapter 5   Syntax Directed Translation
Chapter 5 Syntax Directed Translation
 
Keywords, identifiers ,datatypes in C++
Keywords, identifiers ,datatypes in C++Keywords, identifiers ,datatypes in C++
Keywords, identifiers ,datatypes in C++
 
Basic concept of c++
Basic concept of c++Basic concept of c++
Basic concept of c++
 
Fun with lambda expressions
Fun with lambda expressionsFun with lambda expressions
Fun with lambda expressions
 
C++ Tokens
C++ TokensC++ Tokens
C++ Tokens
 
Introduction to objects and inputoutput
Introduction to objects and inputoutput Introduction to objects and inputoutput
Introduction to objects and inputoutput
 
02. chapter 3 lexical analysis
02. chapter 3   lexical analysis02. chapter 3   lexical analysis
02. chapter 3 lexical analysis
 
JavaScript – ECMAScript Basics By Satyen
JavaScript – ECMAScript Basics By SatyenJavaScript – ECMAScript Basics By Satyen
JavaScript – ECMAScript Basics By Satyen
 
C++ Programming Language Training in Ambala ! Batra Computer Centre
C++ Programming Language Training in Ambala ! Batra Computer CentreC++ Programming Language Training in Ambala ! Batra Computer Centre
C++ Programming Language Training in Ambala ! Batra Computer Centre
 
Sdt
SdtSdt
Sdt
 
Getting started with c++
Getting started with c++Getting started with c++
Getting started with c++
 
Type checking compiler construction Chapter #6
Type checking compiler construction Chapter #6Type checking compiler construction Chapter #6
Type checking compiler construction Chapter #6
 
Lecture8 syntax analysis_4
Lecture8 syntax analysis_4Lecture8 syntax analysis_4
Lecture8 syntax analysis_4
 
C programming tutorial for Beginner
C programming tutorial for BeginnerC programming tutorial for Beginner
C programming tutorial for Beginner
 
Parsing LL(1), SLR, LR(1)
Parsing LL(1), SLR, LR(1)Parsing LL(1), SLR, LR(1)
Parsing LL(1), SLR, LR(1)
 
Lex Tool
Lex ToolLex Tool
Lex Tool
 
New lambdas
New lambdasNew lambdas
New lambdas
 
Lecture5 syntax analysis_1
Lecture5 syntax analysis_1Lecture5 syntax analysis_1
Lecture5 syntax analysis_1
 
Basic of c &c++
Basic of c &c++Basic of c &c++
Basic of c &c++
 

Destacado

Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
ScalaNsk
 
Distributed erlang
Distributed erlangDistributed erlang
Distributed erlang
Yuri Zhloba
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit Scala
Kota Mizushima
 

Destacado (20)

Scala training
Scala trainingScala training
Scala training
 
Scala plugin for IntelliJ IDEA
Scala plugin for IntelliJ IDEAScala plugin for IntelliJ IDEA
Scala plugin for IntelliJ IDEA
 
Feature suggester
Feature suggesterFeature suggester
Feature suggester
 
Scala #5
Scala #5Scala #5
Scala #5
 
Scala #3
Scala #3Scala #3
Scala #3
 
Scala magic
Scala magicScala magic
Scala magic
 
Backend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераBackend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузера
 
Scala #2
Scala #2Scala #2
Scala #2
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Lec 2
Lec 2Lec 2
Lec 2
 
Scala lecture #4
Scala lecture #4Scala lecture #4
Scala lecture #4
 
Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 
Erlang
ErlangErlang
Erlang
 
Scala #4
Scala #4Scala #4
Scala #4
 
Distributed erlang
Distributed erlangDistributed erlang
Distributed erlang
 
Самурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программистаСамурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программиста
 
Переход на Scala: босиком по граблям
Переход на Scala: босиком по граблямПереход на Scala: босиком по граблям
Переход на Scala: босиком по граблям
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотом
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit Scala
 
Clojure #2 (2014)
Clojure #2 (2014)Clojure #2 (2014)
Clojure #2 (2014)
 

Similar a Under the hood of scala implicits (Scala eXchange 2014)

Types by Adform Research
Types by Adform ResearchTypes by Adform Research
Types by Adform Research
Vasil Remeniuk
 
Modern Compiler Design
Modern Compiler DesignModern Compiler Design
Modern Compiler Design
nextlib
 
Denis Lebedev, Swift
Denis  Lebedev, SwiftDenis  Lebedev, Swift
Denis Lebedev, Swift
Yandex
 

Similar a Under the hood of scala implicits (Scala eXchange 2014) (20)

Functional programming with FSharp
Functional programming with FSharpFunctional programming with FSharp
Functional programming with FSharp
 
From DOT to Dotty
From DOT to DottyFrom DOT to Dotty
From DOT to Dotty
 
C# programming
C# programming C# programming
C# programming
 
Demystifying Shapeless
Demystifying Shapeless Demystifying Shapeless
Demystifying Shapeless
 
Functional programming in kotlin with Arrow [Sunnytech 2018]
Functional programming in kotlin with Arrow [Sunnytech 2018]Functional programming in kotlin with Arrow [Sunnytech 2018]
Functional programming in kotlin with Arrow [Sunnytech 2018]
 
Type Classes in Scala and Haskell
Type Classes in Scala and HaskellType Classes in Scala and Haskell
Type Classes in Scala and Haskell
 
Typeclasses
TypeclassesTypeclasses
Typeclasses
 
Types by Adform Research
Types by Adform ResearchTypes by Adform Research
Types by Adform Research
 
Bestiary of Functional Programming with Cats
Bestiary of Functional Programming with CatsBestiary of Functional Programming with Cats
Bestiary of Functional Programming with Cats
 
Parametricity
ParametricityParametricity
Parametricity
 
Scala Intro
Scala IntroScala Intro
Scala Intro
 
Modern Compiler Design
Modern Compiler DesignModern Compiler Design
Modern Compiler Design
 
Testing for share
Testing for share Testing for share
Testing for share
 
Scala 3 Is Coming: Martin Odersky Shares What To Know
Scala 3 Is Coming: Martin Odersky Shares What To KnowScala 3 Is Coming: Martin Odersky Shares What To Know
Scala 3 Is Coming: Martin Odersky Shares What To Know
 
Scala
ScalaScala
Scala
 
Scalapeno18 - Thinking Less with Scala
Scalapeno18 - Thinking Less with ScalaScalapeno18 - Thinking Less with Scala
Scalapeno18 - Thinking Less with Scala
 
Denis Lebedev, Swift
Denis  Lebedev, SwiftDenis  Lebedev, Swift
Denis Lebedev, Swift
 
Why functional programming and category theory strongly matters - Piotr Parad...
Why functional programming and category theory strongly matters - Piotr Parad...Why functional programming and category theory strongly matters - Piotr Parad...
Why functional programming and category theory strongly matters - Piotr Parad...
 
Why functional programming and category theory strongly matters
Why functional programming and category theory strongly mattersWhy functional programming and category theory strongly matters
Why functional programming and category theory strongly matters
 
ecoop-slides.pdf
ecoop-slides.pdfecoop-slides.pdf
ecoop-slides.pdf
 

Último

AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 

Último (20)

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 

Under the hood of scala implicits (Scala eXchange 2014)

  • 1. Under the Hood of Scala Implicits by Alexander Podkhalyuzin Scala eXchange 2014
  • 2. Agenda ● How implicits work ● How IDE can help with them ● Possibilities to improve performance of compilation and IDE responsiveness
  • 3. Implicits: The Beginning Two concepts: 1. Implicit conversions 2. Implicit parameters
  • 4. Implicit conversions Still two cases: 1. Type conversions 2. Extension methods
  • 5. Type conversions implicit def b2a(a: B): A = new A class A; class B val a: A = new B Compiler will search implicit function of type B => A.
  • 6. Search scopes 1. Resolve scope a. Declared implicits b. Imported implicits c. Implicitly imported implicits 2. Extended scope a. Companion objects of parts? of B => A type.
  • 7. If few implicits were found... class Base; object Base { implicit def clazz2str(c: Clazz): String = "" } class Clazz extends Base; object Clazz { implicit def base2str(b: Base): String = "" } val c: String = new Clazz
  • 8. Performance If all implicits are in the resolve scope 1. Complexity to find right one 2. Harder to debug problems, when wrong implicit is chosen
  • 9. Performance Solution: 1. Use “Extended scope” to encapsulate implicits as much as possible 2. Try to split implicits by priority
  • 10. Explicit return type class A; class B def toInt(x: B): Int = 123 def goo(x: A) = toInt(new A) implicit def a2b(x: A) = new B
  • 11. Extension methods We can add new methods to existing types class Type class TypeExt { def foo(x: Int) = 123 } implicit def extType(a: Type): TypeExt = new TypeExt (new Type).foo(1)
  • 12. Algorithm... 1. Find method without implicit conversion. 2. All are not applicable a. Find such conversions, which add applicable method b. Choose most specific conversion of them 3. If in (1) we found something not applicable, then we can’t use implicits for args 4. We can’t choose most specific method among methods coming from different implicit conversions
  • 13. Implicit classes For most cases we want implicit classes: implicit class Foo(s: String) { def intValue: Int = s.toInt }
  • 14. Magnet pattern ● Widely used in Spray routes ● Originally was described in spray.io blog
  • 15. Parameter Info problem With magnet pattern “Parameter Info” stops working in IDE, isn’t it?..
  • 16. Implicit parameters Compiler is able to fill missing implicit parameter list on the call site: implicit val x: Int = 1 def foo(implicit x: Int) = x + 1 foo
  • 17. Recursiveness The main feature, which gives us a step towards type-level programming: class Ordering[T] implicit val intOrdering: Ordering[Int] = null implicit def listOrdering[T]( implicit t: Ordering[T] ): Ordering[List[T]] = null
  • 18. How it works? Implicit parameter search is completely the same as Implicit conversion search, just we will search not only function types.
  • 19. SOE... implicit def a(implicit s: String): Int = 1 implicit def b(implicit i: Int): String = "1" Compiler is able to stop recursion. How?
  • 20. Another example implicit def a[T](implicit t: T): List[T] = ??? implicit def b[T](implicit t: T): Option[T] = ??? implicit val s: String = ??? def foo(implicit l: List[Option[List[String]]]) {} foo //foo(a(b(a(s))))
  • 21. Complexity of type Number of different parts of type: List[Int] complexity is 2 Seq[Int, Option[String]] complexity is 4 Top level classes are List and Seq.
  • 22. Complexity of type To avoid SOE: ● Have list of types to search ● Do not add new search for some type if ○ List contains equivalent type ○ List contains type with same top level class and complexity of new type is bigger
  • 23. Local type inference It’s not legal in Scala: def foo[T](x: T, y: T => String) = y(x) foo("text", s => s + s)
  • 24. Local type inference Scala compiler tries to solve type parameters for every single parameter list. Solution: def foo[T](x: T)(y: T => String) = y(x) foo("text")(s => s + s)
  • 25. Type inference for implicits So is it the same for implicit parameters?
  • 26. -Xprint:typer It’s good when everything is ok. -Xprint:typer can help you to see implicits.
  • 27. Implicit conversions In IntelliJ IDEA you can use currently available tool to analyze available implicit conversions.
  • 28. Implicit parameters In IntelliJ IDEA ● Only in correct case ● It’s not including implicit conversions
  • 29. What’s next ● Use implicits as it’s most important feature of Scala language ● Now you know almost everything about implicits, so use it safely ● Choose right tools...
  • 30. Thank you! twitter: Safela email: Alexander.Podkhalyuzin@jetbrains.com