monads in practice

47
Monads in Practice Christophe Marchal | Software Architect

Upload: christophe-marchal

Post on 22-Jun-2015

259 views

Category:

Software


1 download

DESCRIPTION

Lecture demistifying monads. After talking a bit about Monoids and Functor I explain a functional design technics which is Monad through the refactoring of a JDBC code. Talk given at The Developper Conference in Porto Alegre in 2014 (http://www.thedevelopersconference.com.br), Code source of the presentation is in my github: https://github.com/toff63/monads-in-practice-tdc

TRANSCRIPT

Page 1: Monads in practice

Monads in Practice

Christophe Marchal | Software Architect

Page 3: Monads in practice

Disclaimer

Page 4: Monads in practice

Manage complexity with Monad

Page 5: Monads in practice

Study Monads online is hard

Page 6: Monads in practice

Academic talks

Func

tor

Monoids

Monads

Category theory

Page 7: Monads in practice

Category Theory

Page 8: Monads in practice

Function

Monoids

Associative

( 1 + 2 ) + 3 = 1 + ( 2 + 3 )

InitiAl Value

Result stay in the same

category

Page 9: Monads in practice

Monoid Example

Page 10: Monads in practice

Monoid

Page 11: Monads in practice

FunctorThings that can be map over

map

capacityBEHaviour

Page 12: Monads in practice

Functor: Example

Page 13: Monads in practice

Functor: Example

Page 14: Monads in practice

Monads

Page 15: Monads in practice

Problem it solves

Page 16: Monads in practice

Scenario

F 1 F 2

Page 17: Monads in practice

sweet

Monads Rules: function to create it

Page 18: Monads in practice

Broken Composition

F 1

F 2

sweet

Page 19: Monads in practice

F 1

map ( f 2 )

sweet

Monads Rules: You need a Functor

Page 20: Monads in practice

Scenario

F 1 F 3

sweet

Page 21: Monads in practice

F 1

sweet

Problem: Nested Monad

map ( f 3 )

sweet

Page 22: Monads in practice

F 1

sweet

Flatmap ( f 3 )

Monads Rules: You need a Flatmap

Page 23: Monads in practice
Page 24: Monads in practice

Business rule

age > 18

AuthorizedNot

Authorized

TRUE False

Page 25: Monads in practice

Business rule implementation

Page 26: Monads in practice

What we want

Page 27: Monads in practice

Monad (?) Code

Page 28: Monads in practice

Trade-off

More code than before

Better API

Easy to reuse

Potential complexity Managed

Page 29: Monads in practice

Traditional Code

Page 30: Monads in practice

Side Effect

Our method can return either a sequence

either null

Page 31: Monads in practice

Exist?

null ?

Riendutout quelquechose

TRUE False

Page 32: Monads in practice

Encapsulating if null with Option

Page 33: Monads in practice

Creating our OptionBagual

Page 34: Monads in practice

Code with Options

Page 35: Monads in practice

Business code

Page 36: Monads in practice

Side Effect

Our method can return either an option

[sequence] either throw an exception

Page 37: Monads in practice

Try!

Try to

execute

Gremio Inter

Success Failure

Page 38: Monads in practice

Encapsulating try/catch with Try

Page 39: Monads in practice

Encapsulating try/catch with Try

Page 40: Monads in practice

Code with Try

Page 41: Monads in practice

Business code

Page 42: Monads in practice

Connection Handling

Page 43: Monads in practice

No silver bullet

Page 44: Monads in practice

Loan Pattern

Page 45: Monads in practice

Final Code

Page 46: Monads in practice

Conclusion

● NO IFs

● Border cases handled on demand

● More declarative types

● Highlight business code

● Easy to create

● More reusable code

Page 47: Monads in practice

Thank You!

Christophe Marchal | Software Architect