Top Banner
Monoids, Monoids everywhere cyrille martraire @cyriux
174

Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Aug 06, 2015

Download

Software

Mozaic Works
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Monoids,!Monoids everywhere

cyrille martraire!@cyriux

Page 2: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Can you tell the

difference?

Page 3: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Monoid

Page 4: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Glass of beer

Page 5: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

This talk is the answer

Page 6: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

DDD

Page 7: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

FP

Page 8: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

(00)

Page 9: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

A matter of Taste

http://rosshirt.blogspot.fr/

The Code Gourmet

(dedicated to @ziobrando)

Page 10: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Passionate developer

PARIS Since 1999

!@cyriux

Cyrille Martraire

Page 11: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Paris Software Craftsmanship Community

http://www.meetup.com/paris-software-craftsmanship/

Page 12: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

TDDBDDDDDLegacy

Page 13: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

WARNINGThe following show features no spectacular stunt, no live coding, only trivial Java code. You can re-create or re-enact at home with no danger.

Page 14: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

a bit personal

Page 15: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Adopted 2005 Still in love

Page 16: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

a question

Page 17: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

What do DDD & FP have in common?

Page 18: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

"My first encounter with FP concepts was from DDD"

Page 19: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

FP = ?

Page 20: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Page 21: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Page 22: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

http://www.jaider.net/archives/609-intro-to-functional-programming/

PURE

Page 23: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

No State No War

Page 24: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Page 25: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

So what do DDD & FP

have in common?

Page 26: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Value Objects................................................................................................. 19

Page 27: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Learn one

and get the other

one for FREE!

Page 28: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

DDDFP

(OO)

Page 29: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

NICE STYLE

of code

Page 30: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

DDD+FP = ?

Page 31: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Page 32: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Example PLZ?

Page 33: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

MONOIDZ!

Page 34: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

@cyriux

Page 35: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Closure Associativity

Neutral Element

Page 36: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Page 37: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

only 3 numbers in

programming

Page 38: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

0, 1, MANY

Page 39: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Monoid: encapsulate

diversity inside

Page 40: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

0, 1, MANY

Neutral Element

Element

Operation

Page 41: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Encapsulate special cases

→ simple again

Page 42: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Battle against complexity

Page 43: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

× × × …

Page 44: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

× × × …

Page 45: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

× × × …

Page 46: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Applied often:

→ scalable process

→ can grow to high complexity

Page 47: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Scalable in complexity

Page 48: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

For a given interface I find myself doing often 0, 1, Many

OO FTW!

Page 49: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

0, 1, MANY

NullObject

Implementation(s)

Composite

Page 50: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Identity Element = NullObject

VatCalculation.NONE

Page 51: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Example PLZ!

Page 52: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Numbers int+int=int

(3+5)+2=3+(5+2) 0

Page 53: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Lists (.)+(.,.)=(.,.,.)

(a ︎)+(b,︎c)=(a ︎, b)+(c) ()

Page 54: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Strings "hello"+"world" "cy"+"ri"+"lle"

""

Page 55: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

look simplistic; the key to very

complex behavior

Page 56: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

The key to infinite scalability!

(space)

Page 57: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

The key to infinite incremental computing!

(ti

me)

Page 58: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Hadoop x Storm

Page 59: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Composeability

Page 60: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Abstractions in the small that

compose at large

Page 61: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Monoids ☛ reduce

Page 62: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Monoids ☛ domain

Page 63: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Monoids ☛ domain

Page 64: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Monoids: typical FP

Page 65: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

FP: Everything is a

value

Page 66: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Therefore: Monoids are

values!

PROOF

Page 67: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

VALUE OBJECTS

Page 68: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Immutable Equals by value

Page 69: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Value Object

A DDD pattern to import FP-ish

values in OO languages

Page 70: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Not Anemic

Page 71: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

18 m + 16 m = 34 m

Page 72: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

returns  a  new  instance

Change -> new instance

Page 73: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

SIDE-EFFECT -free

FUNCTIONS

Page 74: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Immutability &

Side-effect-free functions!

Page 75: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

“Functional-First” style

Page 76: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

90%“Functional-First” style

Value Objects

(Ok, gut feeling, I did’nt measure)

Page 77: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Money

Page 78: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

(25, EUR) +

(30, EUR) =

(55, EUR)

Page 79: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

(25, EUR) +

(30, USD) =

exception

Page 80: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Money

amount currencyadd(Money): Money

<<ValueObject>>

Page 81: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Page 82: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Cashflows (Payments)

Page 83: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

(25, EUR, today) +

(30, EUR, today) =

(55, EUR, today)

Page 84: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

(25, EUR, today) +

(30, EUR, next day) =

exception

Page 85: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

CashFlow

amount currency date

add(CashFlow):CashFlow

<<ValueObject>>

Page 86: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

CLOSURE of

OPERATION

Page 87: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Cashflows Sequences

Page 88: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

(10, EUR, 20/03)

(30, EUR, 21/03)

(25, EUR, 21/03)

(12, EUR, 22/03)

(10, EUR, 20/03)

(55, EUR, 21/03)

(12, EUR, 22/03)

+

=

Page 89: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Cashflow Sequence +

Cashflow Sequence =

Cashflow Sequence

Page 90: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Object Arithmetics

Page 91: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

This is how domain experts THINK

about itSAY

SKETCH

Page 92: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Page 93: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Ranges

Page 94: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

[1, 3] Union* [2, 4]

= [1, 4]

* for a bounding box-kind definition of union

Page 95: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

[1, 3] Union [2, 4]

= [1, 4] ][

Page 96: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Predicates

Page 97: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Filter AND Filter

= Filter

Page 98: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Filter AND Filter

= Filter

Always

True

Page 99: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Filter OR

Filter =

Filter

Page 100: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Filter OR

Filter =

FilterAlways

False

Page 101: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Grants

Page 102: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Read, Write, Execute !

"most secure wins" !

r + w = r w + x = w

Page 103: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Configuration Maps

Page 104: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Color BLUE

Enable TrueTimeout 30 +

=

Color RED

Enable FalseTimeout 25

Desk FX

Color RED

Enable TrueTimeout 25

Desk FX

Default Desk-specific

Page 105: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Color BLUE

Enable TrueTimeout 30 +

=

Color RED

Enable FalseTimeout 25

Desk FX

Color RED

Enable TrueTimeout 25

Desk FX

Default Desk-specific

overw

rite

logic

al OR

min

Page 106: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Color BLUE

Enable TrueTimeout 30 +

=

Color RED

Enable FalseTimeout 25

Desk FX

Color RED

Enable TrueTimeout 25

Desk FX

Default Desk-specific

overw

rite

logic

al OR

min

Values are monoids too!

Page 107: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Color BLUE

Enable TrueTimeout 30 +

=Color BLUE

Enable TrueTimeout 30

Color NONE

Enable FalseTimeout +∞

Desk ALLNeutral Element

Page 108: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Color BLUE

Enable TrueTimeout 30 +

=Color BLUE

Enable TrueTimeout 30

Neutral Element

Page 109: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Color BLUE

Enable TrueTimeout 30 +

=Color BLUE

Enable TrueTimeout 30

Value Objects may be

*BIG* object trees!

(DOM)

Page 110: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Page 111: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Non-Linear Stuff (average, std dev,

K-clustering, barycenters...)

Page 112: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Average + Average = WRONG

Page 113: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Average + Average Not Composeable!

Page 114: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Page 115: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Page 116: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

avg = sum / count !

avg = sum / count !

Page 117: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

avg = sum / count !

avg = sum / count !

+

Page 118: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

avg = sum / count !

avg = sum / count !

+ +

Page 119: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

avg = sum / count !

avg = sum / count !

avg = sum / count

+

=

+

=

Page 120: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

(sum, count) !

(sum, count) !

(sum, count)

+

=

Average

Page 121: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

(sum, sum2, count) !

(sum, sum2, count) !

(sum, sum2, count)

+

=

Std deviation

Page 122: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Can model as a monoid even non-

linear stuff!

Page 123: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Page 124: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

MOAR MATHS

PLZ!

Page 125: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Monoid several times...

toString(): String union(MailingList): MailingList intersection(MailingList): MailingList nobody(): MailingList everybody(): MailingList

MailingList

Page 126: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Space Vectors

Page 127: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

average temperature! = t1.add(t2)! .scale(1/2)

Page 128: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

returns  a  new  instance

Change -> new instance

Page 129: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Space Vector

toCelsius(): Temperature toFarenheit(): Temperature add(Temperature): Temperature scale(double): Temperature

Temperature

Page 130: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Why is it useful?

Page 131: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

(10, EUR, 20/03)

(30, EUR, 21/03)

(25, EUR, 21/03)

(12, EUR, 22/03)

(10, EUR, 20/03)

(55, EUR, 21/03)

(12, EUR, 22/03)

+

=

Page 132: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Cashflow Sequence +

Cashflow Sequence =

Cashflow Sequence

Page 133: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

This is how domain experts THINK

about itSAY

SKETCH

Page 134: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

DECLARATIVE STYLE

Page 135: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Much less code Much less bugs

Page 136: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Page 137: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

// without monoids PaymentsFees(...) PaymentsFeesWithOptions(...) PaymentsFeesWithInsuranceAndOptions(...) PaymentsFeesWithInsurance(...) NoFeesButInsurance(...) ...

Page 138: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

// with monoids fees(...) : Payments options(...) : Payments insurance(...) : Payments !Payments.add(Payments) : Payments

Page 139: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

side-effect-free

operation

Very easy to test

input output

Page 140: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Much less stuff to learn

Page 141: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Cashflow Sequence +

Cashflow Sequence =

Cashflow Sequence

Page 142: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Monoid/Vector Spaces/Cyclic Group

Page 143: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Literature Documented

Page 144: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

ESTABLISHED FORMALISMS

Page 145: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

@annotations

@Monoid(neutral="emptyList") intersection(MailingList): MailingList !emptyList(): MailingList

MailingList

Page 146: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

LIVING DOCUMENTATION

Page 147: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Write code that tells the business

domain stories

Page 148: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

generic naming

@Monoid(neutral="emptyList") intersection(MailingList): MailingList !emptyList(): MailingList

MailingList

Page 149: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Domain-Specific naming

@Monoid(neutral="nobody") overlapping(MailingList): MailingList !nobody(): MailingList

MailingList

Page 150: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

SELF-EXPLAINING VALUES

Page 151: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

We Want:Traceability of processing

Page 152: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

No worry!

Page 153: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Just enrich our types

Page 154: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Just enrich our types

Page 155: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Just enrich our types

!

label field

Page 156: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Monad-ish No logging needed Each value stores

its history

Page 157: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

http://stuartcook.files.wordpress.com/2010/11/happy-monkey.jpg

Page 158: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Page 159: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

In Closing

Page 160: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Composeability Composeability Composeability Composeability Composeability Composeability

Page 161: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Invest time: Learn DDD, and get

free FP exposure

Page 162: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

A paradox: FP influence helps craft better Object-

Oriented code!

Page 163: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

So simple, most people

have no appreciation

of that!

Page 164: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Monoids are good: Eat Them!

Page 165: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

LOOK 4 Ur DOMAIN MONOIDZ!

Page 166: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Also learn other maths structures

Page 167: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Wikipedia is your friend!

Page 168: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

DDD+FP=

Page 169: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

http://wadler.blogspot.fr/2008/04/functional-programming-is-beautiful.html

Page 170: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Taste-Driven Development

TDD @cyriux

Page 171: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Page 172: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Questions? Did you try similar things too?

Let’s discuss!

@cyriux

Page 173: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Follow me @cyriux !

Slides: slideshare.net/cyriux Blog: cyrille.martraire.com

!

In Paris? Join !

Page 174: Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015

Merci