SlideShare a Scribd company logo
1 of 105
Applied category theory
The emerging science of compositionality @KenScambler
Category theory
From “Seven Sketches of Compositionality”
Fong & Spivak (2018)
Applied category theory
prepare lemon meringue pie
make
lemon
filling
fill crust
make
meringue
separate egg
prepared crust
lemon
butter
sugar
yolk
egg
white
sugar
meringue
lemon
filling
unbaked
lemon
pie unbaked
pieadd
meringue
Applied category theory
• Emerging field!
• Explosion of papers, research, development in last 5 years
• Builds a common vocabulary of composition across
disciplines
• Enables intuitive, precise visual representations
Brand new ACT Journal
Brand new ACT Book
ACT Topics & papers
Q: Is functional programming applied
category theory?
Q: Is functional programming applied
category theory?
A: Yes! (…arguably)
Plan
• I want to put applied category theory on your roadmap
• The big idea: compositionality
• Case study: Complex adaptive system design: military search & rescue
• Four concepts of composition:
• Monoids
• Categories
• Operads
• Monoidal categories
• Two graphical languages:
• String diagrams
• Wiring diagrams
Compositionality
The meaning of a complex expression is determined by:
1. The meaning of the constituent parts
2. The rules for how those parts are combined
Frege’s Principle of Compositionality
Making big things
Compositionality lets us
Making big things
out of little things
Compositionality lets us
Compositionality lets us
Making big things
out of little things
preserving guarantees
Compositionality applied
• Little programs that work
BIG programs that work?
• Little electric circuits that work
BIG electric circuits that work?
• Little Feynman diagrams that describe real physics
BIG Feynman diagrams that describe real physics?
• Little resource plans that are feasible
BIG resource plans that are feasible?
• Little networks of agents that can solve problems
BIG networks of agents that can solve problems?
Compositionality distilled - monoids
c d
e
f
h
j
a
b
i
g
a b
a b
Compose any two
ab
Associativity – no need for brackets
a b c
Associativity – no need for brackets
a b c
Associativity – no need for brackets
a b c
Associativity – no need for brackets
a b c
Associativity – no need for brackets
abc
With associativity
abc = a b c
Just the sum of
its parts with
Without associativity
+ orabc = a b c
Uh-oh! We need
external data
Identity – doesn’t do anything when you
compose
a
Identity – doesn’t do anything when you
compose
a
Identity – doesn’t do anything when you
compose
a
Compositionality distilled - categories
c d
e
f
h
j
a
b
i
g
a b
The building
blocks are called
morphisms
The colours are
called objects
a b
Can only
compose when
the colours match
ab
The middle bit
disappears
a b
Associativity – no need for brackets
c
a b
Associativity – no need for brackets
c
a b
Associativity – no need for brackets
c
a b
Associativity – no need for brackets
c
abc
Associativity – no need for brackets
a
Identities – don’t do anything when you
compose
a
Identities – don’t do anything when you
compose
a
Identities – don’t do anything when you
compose
Case study: Complex Adaptive System Design
from
“Complex Adaptive System Design” blog posts by John C. Baez
(2016-2019)
“Network Models” by Baez, Foley, Moeller, Pollard (2017)
Military research: search & rescue
• Systems of systems
• Many different kinds of networks
• Complex realtime behaviour
• How to connect them all?
Helo
1
Target
1Port
1
Helicopter knows
the target and
home base
In comms
range
In comms
range
My port
Intent to rescue
Helo
1
UAV
1
Target
1
UAV knows the
target, and the
helicopter as a
home base
In comms
range
Intent to rescue
My port
Overlay the
networks
We now have a
bigger network
working together
Helo
1
Target
1Port
1
My port
Intent to rescue
UAV
1
My port
In comms
range
In comms
range
In comms
range
Intent to rescue
Helo
network
UAV
network
Overlaying is monoidal; you
can always overlay
Helo
network
UAV
network
Overlaying is monoidal; you
can always overlay
over
lay
Combined
network
Overlaying is monoidal; you
can always overlay
How to sew together unrelated networks?
Helo
1
UAV
1
Target
1
UAV
2
UAV
3
UAV
5
Rescue-Scene
UAV
4
In comms
range
In comms
range
UAV-Search-Net
Helo
2
Homebase
Intent to rescue
My port
Havana
1 2
3
4 5
6 7
8
9
How to sew together unrelated networks?
“Take 3 networks of 3, 4
and 2 vertices; return a
network of 9 vertices”
Intent to rescue
Helo
1
UAV
1
Target
1
UAV
2
UAV
3
UAV
5
UAV
4
In comms
range
In comms
rangeHelo
2
In comms
range
Intent to
rescue
My port
Intent to
rescue
Havana
Is that a category?
Network-1 Network-2 Network-3
Nope!
You can’t compose the
networks themselves.
Network-1 Network-2 Network-3
Morphisms with lots of inputs?
The ”type” is the number
of vertices expected in
subnetworks
“Take 3 networks of 3, 4 and
2 vertices; return a network
of 9 vertices”
3
4
2
9
Compositionality distilled – operads
a
c
b
d
a
cb
a
cb
a
cb
a
cb
abc
a
a
a
a
Obvious example: types & functions
receiveInvoice
User
Invoice
Signature
Receipt
storeReceipt
Receipt
Shoebox
Shoebox
login
Username
Password
User
receiveInvoiceInvoice
Signature
storeReceipt
Shoebox
Shoebox
login
Username
Password
Invoice
Signature
fullInvoiceFlow
Shoebox
Shoebox
Username
Password
def fullInvoiceFlow(username,
password,
invoice,
signature,
shoebox) {
user = login(username, password)
receipt = receiveInvoice(user, invoice, signature)
return storeReceipt(receipt, shoebox)
}
Mapping it to reality
Helicopter
Port
UAV
Target
my port
Intent to rescue
Comms channel
Havana
Rescue-Scene
UAV-Search-Net
Homebase
Mapping it to reality
Helicopter
Port
UAV
Target
my port
Intent to rescue
Comms channel
Havana Rescue-Scene := ...
UAV-Search-Net := ...
Homebase := ...
joinNetworks(Rescue-Scene,
UAV-Search-Net,
Homebase)
To actually use an operad, translate
it to the operad of sets & functions,
preserving composition & identity
From “Seven Sketches of Compositionality”
Fong & Spivak (2018)
String diagrams
prepare lemon meringue pie
make
lemon
filling
fill crust
make
meringue
separate egg
prepared crust
lemon
butter
sugar
yolk
egg
white
sugar
meringue
lemon
filling
unbaked
lemon
pie unbaked
pieadd
meringue
prepare lemon meringue pie
make
lemon
filling
fill crust
make
meringue
separate egg
prepared crust
lemon
butter
sugar
yolk
egg
white
sugar
meringue
lemon
filling
unbaked
lemon
pie unbaked
pieadd
meringue
morphisms
prepare lemon meringue pie
make
lemon
filling
fill crust
make
meringue
separate egg
prepared crust
lemon
butter
sugar
yolk
egg
white
sugar
meringue
lemon
filling
unbaked
lemon
pie unbaked
pieadd
meringue
objects
prepare lemon meringue pie
make
lemon
filling
fill crust
make
meringue
separate egg
prepared crust
lemon
butter
sugar
egg
sugar
unbaked
pieadd
meringue
composition
prepare lemon meringue pie
make
lemon
filling
fill crust
make
meringue
separate egg
prepared crust
lemon
butter
sugar
yolk
egg
white
sugar
meringue
lemon
filling
unbaked
lemon
pie unbaked
pieadd
meringue
tensoring
Tensoring forms a monoid
(up to isomorphism)
lemon butter sugar
make
lemon filling
… on the objects of the category
lemon ⨂ butter ⨂ sugar
lemon
filling
Monoidal categories
Category C
Tensor operation
⨂ : (object, object) -> object
such that (a ⨂ b) ⨂ c ≃ a ⨂ (b ⨂ c)
Unit object
I : object
such that a ⨂ I ≃ I ⨂ a ≃ a
Monoidal categories
f g
x y y z
f g
x y z
f
g
x y
y z
x y
y z
f ⨂ g=
Horizontal composition Vertical composition
x ⨂ y
f ⨂ g=
y ⨂ z
Diagrams inside diagrams
prepare lemon meringue pie
make
lemon
filling
fill crust
make
meringue
separate egg
prepared crust
lemon
butter
sugar
yolk
egg
white
sugar
meringue
lemon
filling
unbaked
lemon
pie unbaked
pieadd
meringue
Make lemon filling
lemon
butter
sugar
Blend
yolk
Beat
Combine
lemon
filling
Diagrams inside diagrams
prepare lemon meringue pie
fill crust
make
meringue
separate egg
prepared crust
lemon
butter
sugar
yolk
egg
white
sugar
meringue
lemon
filling
unbaked
lemon
pie unbaked
pieadd
meringue
Blend
Beat
Combine
oven
unbaked
pie
baked pie
oven
prepare lemon meringue pie
bake pie
prepare lemon meringue pie
oven
unbaked
pie
baked pie
oven
bake pie
Surprise! It’s another operad
Lemon Meringue Pie operad
prepare lemon
meringue pie
sugar ⨂ white  meringue
prepared crust ⨂ lemon ⨂ butter ⨂
sugar ⨂ egg ⨂ sugar  unbaked pie
egg  yolk ⨂ white
lemon ⨂ butter ⨂ sugar ⨂
yolk  lemon filling
prepared crust ⨂ lemon filling
 unbaked lemon pie
unbaked lemon pie ⨂
meringue  unbaked pie
From “Seven Sketches of Compositionality”
Fong & Spivak (2018)
String diagrams in software architecture
• Fantastic for software design
• I’ve used them for years to train junior & senior developers
• Modularity, boundaries
Simon Brown
Level 1
Level 1
Level 2
Level 1
Level 2
Level 3
Level 1
Level 2
Level 3
Level 4
Operad! (maybe)
Operad of wiring diagrams
from
“The operad of wiring diagrams: formalizing a graphical
language for databases, recursion and plug-and-play circuits”
by David I. Spivak (2013)
Inputs x1, x2, x3
Input types
{s,r,t}
{w, x, y, z}
{u, v}
Output type
{a,b,c,d,e}
Compositional SQL queries
SELECT L.student, L.address
FROM attends a1, gender g1, attends a2, gender g2, lives L
WHERE a1.student=g1.student AND a2.student=g2.student
AND L.student=g1.student AND a1.course=a2.course
AND g1.gender=‘male’ AND g2.gender=‘female’
SELECT L.student, L.address
FROM attends a1, gender g1, attends a2, gender g2, lives L
WHERE a1.student=g1.student AND a2.student=g2.student
AND L.student=g1.student AND a1.course=a2.course
AND g1.gender=‘male’ AND g2.gender=‘female’
SELECT L.student, L.address
FROM attends a1, gender g1, attends a2, gender g2, lives L
WHERE a1.student=g1.student AND a2.student=g2.student
AND L.student=g1.student AND a1.course=a2.course
AND g1.gender=‘male’ AND g2.gender=‘female’
TablesConstants
SELECT L.student, L.address
FROM attends a1, gender g1, attends a2, gender g2, lives L
WHERE a1.student=g1.student AND a2.student=g2.student
AND L.student=g1.student AND a1.course=a2.course
AND g1.gender=‘male’ AND g2.gender=‘female’
SELECT
SELECT L.student, L.address
FROM attends a1, gender g1, attends a2, gender g2, lives L
WHERE a1.student=g1.student AND a2.student=g2.student
AND L.student=g1.student AND a1.course=a2.course
AND g1.gender=‘male’ AND g2.gender=‘female’
WHERE
(wiring)
In conclusion
• Applied category theory is an exciting new field that seeks to mine
the benefits of compositionality wherever they may be found
• Supports marvelous graphical languages
• Early days!
• Watch this space
The future
• Anything where “making big things out of little things” is an
important part
• So far: category theorists discovering applications and promoting
• Industry might eventually begin to lead the charge
• Computer science & programming will be at the forefront: software
has eaten the world
• Functional programming will be at the forefront: we are early
adopters
People to follow on Twitter
John C. Baez
@johncarlosbaez
Jules Hedges
@_julesh_
Dr. Eugenia Cheng
@DrEugeniaCheng
Jade Master
@JadeMasterMath
Tai-Danae Bradley
@math3ma
Joe Moeller
@CreeepyJoe
Statebox
@statebox
Jelle Herold
@wires_wires
Fabrizio
Remano
Genovese
@fabgenovese
Further reading
• “Seven Sketches of Compositionality” by Brendan Fong, David I. Spivak (2018)
• “Applied category theory course” by John C. Baez (2018)
• “What is applied category theory?” by Tai-Danae Bradley (2018)
• “Network models” by Baez, Foley, Moeller, Pollard (2017)
• “The operad of wiring diagrams: formalizing a graphical language for
databases, recursion and plug-and-play circuits” by David I. Spivak (2013)

More Related Content

What's hot

Domain Modeling Made Functional (KanDDDinsky 2019)
Domain Modeling Made Functional (KanDDDinsky 2019)Domain Modeling Made Functional (KanDDDinsky 2019)
Domain Modeling Made Functional (KanDDDinsky 2019)Scott Wlaschin
 
Railway Oriented Programming
Railway Oriented ProgrammingRailway Oriented Programming
Railway Oriented ProgrammingScott Wlaschin
 
Lexical analysis - Compiler Design
Lexical analysis - Compiler DesignLexical analysis - Compiler Design
Lexical analysis - Compiler DesignKuppusamy P
 
Running Free with the Monads
Running Free with the MonadsRunning Free with the Monads
Running Free with the Monadskenbot
 
Functor, Apply, Applicative And Monad
Functor, Apply, Applicative And MonadFunctor, Apply, Applicative And Monad
Functor, Apply, Applicative And MonadOliver Daff
 
Lexical Analysis - Compiler Design
Lexical Analysis - Compiler DesignLexical Analysis - Compiler Design
Lexical Analysis - Compiler DesignAkhil Kaushik
 
Refactoring for Software Design Smells
Refactoring for Software Design SmellsRefactoring for Software Design Smells
Refactoring for Software Design SmellsGanesh Samarthyam
 
Basic Blocks and Flow Graphs
Basic Blocks and Flow GraphsBasic Blocks and Flow Graphs
Basic Blocks and Flow GraphsJenny Galino
 
Property-Based Testing
Property-Based TestingProperty-Based Testing
Property-Based TestingShai Geva
 
Python Programming Language
Python Programming LanguagePython Programming Language
Python Programming LanguageLaxman Puri
 
Lecture 02 lexical analysis
Lecture 02 lexical analysisLecture 02 lexical analysis
Lecture 02 lexical analysisIffat Anjum
 
ZIO-Direct - Functional Scala 2022
ZIO-Direct - Functional Scala 2022ZIO-Direct - Functional Scala 2022
ZIO-Direct - Functional Scala 2022Alexander Ioffe
 
Job Queue in Golang
Job Queue in GolangJob Queue in Golang
Job Queue in GolangBo-Yi Wu
 
Taking your side effects aside
Taking your side effects asideTaking your side effects aside
Taking your side effects aside💡 Tomasz Kogut
 
Compiler Design LR parsing SLR ,LALR CLR
Compiler Design LR parsing SLR ,LALR CLRCompiler Design LR parsing SLR ,LALR CLR
Compiler Design LR parsing SLR ,LALR CLRRiazul Islam
 

What's hot (20)

Domain Modeling Made Functional (KanDDDinsky 2019)
Domain Modeling Made Functional (KanDDDinsky 2019)Domain Modeling Made Functional (KanDDDinsky 2019)
Domain Modeling Made Functional (KanDDDinsky 2019)
 
Golang
GolangGolang
Golang
 
Railway Oriented Programming
Railway Oriented ProgrammingRailway Oriented Programming
Railway Oriented Programming
 
Lexical analysis - Compiler Design
Lexical analysis - Compiler DesignLexical analysis - Compiler Design
Lexical analysis - Compiler Design
 
Running Free with the Monads
Running Free with the MonadsRunning Free with the Monads
Running Free with the Monads
 
Compiler type
Compiler typeCompiler type
Compiler type
 
Functor, Apply, Applicative And Monad
Functor, Apply, Applicative And MonadFunctor, Apply, Applicative And Monad
Functor, Apply, Applicative And Monad
 
Lexical Analysis - Compiler Design
Lexical Analysis - Compiler DesignLexical Analysis - Compiler Design
Lexical Analysis - Compiler Design
 
Refactoring for Software Design Smells
Refactoring for Software Design SmellsRefactoring for Software Design Smells
Refactoring for Software Design Smells
 
Basic Blocks and Flow Graphs
Basic Blocks and Flow GraphsBasic Blocks and Flow Graphs
Basic Blocks and Flow Graphs
 
Property-Based Testing
Property-Based TestingProperty-Based Testing
Property-Based Testing
 
ZIO Queue
ZIO QueueZIO Queue
ZIO Queue
 
Python Programming Language
Python Programming LanguagePython Programming Language
Python Programming Language
 
Basics of python
Basics of pythonBasics of python
Basics of python
 
Lecture 02 lexical analysis
Lecture 02 lexical analysisLecture 02 lexical analysis
Lecture 02 lexical analysis
 
ZIO-Direct - Functional Scala 2022
ZIO-Direct - Functional Scala 2022ZIO-Direct - Functional Scala 2022
ZIO-Direct - Functional Scala 2022
 
Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
 
Job Queue in Golang
Job Queue in GolangJob Queue in Golang
Job Queue in Golang
 
Taking your side effects aside
Taking your side effects asideTaking your side effects aside
Taking your side effects aside
 
Compiler Design LR parsing SLR ,LALR CLR
Compiler Design LR parsing SLR ,LALR CLRCompiler Design LR parsing SLR ,LALR CLR
Compiler Design LR parsing SLR ,LALR CLR
 

Similar to Applied category theory: the emerging science of compositionality

Building Applications with a Graph Database
Building Applications with a Graph DatabaseBuilding Applications with a Graph Database
Building Applications with a Graph DatabaseTobias Lindaaker
 
Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)Scott Wlaschin
 
Donut chart in Revit with Dynamo
Donut chart in Revit with DynamoDonut chart in Revit with Dynamo
Donut chart in Revit with DynamoWojciech Klepacki
 
How to Have Code Reviews That Developers Actually Want
How to Have Code Reviews That Developers Actually WantHow to Have Code Reviews That Developers Actually Want
How to Have Code Reviews That Developers Actually WantCameron Presley
 
From V8 to Modern Compilers
From V8 to Modern CompilersFrom V8 to Modern Compilers
From V8 to Modern CompilersMin-Yih Hsu
 
The OpenRepGrid project – Software tools for the analysis and administration...
The OpenRepGrid project – Software tools  for the analysis and administration...The OpenRepGrid project – Software tools  for the analysis and administration...
The OpenRepGrid project – Software tools for the analysis and administration...Mark Heckmann
 
C# .NET - Um overview da linguagem
C# .NET - Um overview da linguagem C# .NET - Um overview da linguagem
C# .NET - Um overview da linguagem Claudson Oliveira
 
Design patterns
Design patternsDesign patterns
Design patternsnisheesh
 
Clean Code Part III - Craftsmanship at SoCal Code Camp
Clean Code Part III - Craftsmanship at SoCal Code CampClean Code Part III - Craftsmanship at SoCal Code Camp
Clean Code Part III - Craftsmanship at SoCal Code CampTheo Jungeblut
 
Neo4j Training Modeling
Neo4j Training ModelingNeo4j Training Modeling
Neo4j Training ModelingMax De Marzi
 
Ember. it is time to try
Ember. it is time to tryEmber. it is time to try
Ember. it is time to tryYaroslav Popov
 
Know your platform. 7 things every scala developer should know about jvm
Know your platform. 7 things every scala developer should know about jvmKnow your platform. 7 things every scala developer should know about jvm
Know your platform. 7 things every scala developer should know about jvmPawel Szulc
 
Principles Of Web Design Workshop
Principles Of Web Design WorkshopPrinciples Of Web Design Workshop
Principles Of Web Design WorkshopGavin Elliott
 
How Shutl Delivers Even Faster Using Neo4J
How Shutl Delivers Even Faster Using Neo4JHow Shutl Delivers Even Faster Using Neo4J
How Shutl Delivers Even Faster Using Neo4JC4Media
 
Data oriented design and c++
Data oriented design and c++Data oriented design and c++
Data oriented design and c++Mike Acton
 
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmxMoved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmxMilen Dyankov
 

Similar to Applied category theory: the emerging science of compositionality (20)

Building Applications with a Graph Database
Building Applications with a Graph DatabaseBuilding Applications with a Graph Database
Building Applications with a Graph Database
 
Ruby Egison
Ruby EgisonRuby Egison
Ruby Egison
 
Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)
 
Donut chart in Revit with Dynamo
Donut chart in Revit with DynamoDonut chart in Revit with Dynamo
Donut chart in Revit with Dynamo
 
How to Have Code Reviews That Developers Actually Want
How to Have Code Reviews That Developers Actually WantHow to Have Code Reviews That Developers Actually Want
How to Have Code Reviews That Developers Actually Want
 
From V8 to Modern Compilers
From V8 to Modern CompilersFrom V8 to Modern Compilers
From V8 to Modern Compilers
 
Sylius, the good choice
Sylius, the good choiceSylius, the good choice
Sylius, the good choice
 
The OpenRepGrid project – Software tools for the analysis and administration...
The OpenRepGrid project – Software tools  for the analysis and administration...The OpenRepGrid project – Software tools  for the analysis and administration...
The OpenRepGrid project – Software tools for the analysis and administration...
 
C# .NET - Um overview da linguagem
C# .NET - Um overview da linguagem C# .NET - Um overview da linguagem
C# .NET - Um overview da linguagem
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Clean Code Part III - Craftsmanship at SoCal Code Camp
Clean Code Part III - Craftsmanship at SoCal Code CampClean Code Part III - Craftsmanship at SoCal Code Camp
Clean Code Part III - Craftsmanship at SoCal Code Camp
 
Scalax
ScalaxScalax
Scalax
 
Neo4j Training Modeling
Neo4j Training ModelingNeo4j Training Modeling
Neo4j Training Modeling
 
Ember. it is time to try
Ember. it is time to tryEmber. it is time to try
Ember. it is time to try
 
Quality code 2019
Quality code 2019Quality code 2019
Quality code 2019
 
Know your platform. 7 things every scala developer should know about jvm
Know your platform. 7 things every scala developer should know about jvmKnow your platform. 7 things every scala developer should know about jvm
Know your platform. 7 things every scala developer should know about jvm
 
Principles Of Web Design Workshop
Principles Of Web Design WorkshopPrinciples Of Web Design Workshop
Principles Of Web Design Workshop
 
How Shutl Delivers Even Faster Using Neo4J
How Shutl Delivers Even Faster Using Neo4JHow Shutl Delivers Even Faster Using Neo4J
How Shutl Delivers Even Faster Using Neo4J
 
Data oriented design and c++
Data oriented design and c++Data oriented design and c++
Data oriented design and c++
 
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmxMoved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
 

More from kenbot

Grow your own tech leads
Grow your own tech leadsGrow your own tech leads
Grow your own tech leadskenbot
 
Responsible DI: Ditch the Frameworks
Responsible DI: Ditch the FrameworksResponsible DI: Ditch the Frameworks
Responsible DI: Ditch the Frameworkskenbot
 
FP adoption at REA
FP adoption at REAFP adoption at REA
FP adoption at REAkenbot
 
Lenses for the masses - introducing Goggles
Lenses for the masses - introducing GogglesLenses for the masses - introducing Goggles
Lenses for the masses - introducing Goggleskenbot
 
Good functional programming is good programming
Good functional programming is good programmingGood functional programming is good programming
Good functional programming is good programmingkenbot
 
Data made out of functions
Data made out of functionsData made out of functions
Data made out of functionskenbot
 
Imagine a world without mocks
Imagine a world without mocksImagine a world without mocks
Imagine a world without mockskenbot
 
2 Years of Real World FP at REA
2 Years of Real World FP at REA2 Years of Real World FP at REA
2 Years of Real World FP at REAkenbot
 
Your data structures are made of maths!
Your data structures are made of maths!Your data structures are made of maths!
Your data structures are made of maths!kenbot
 
The disaster of mutable state
The disaster of mutable stateThe disaster of mutable state
The disaster of mutable statekenbot
 

More from kenbot (10)

Grow your own tech leads
Grow your own tech leadsGrow your own tech leads
Grow your own tech leads
 
Responsible DI: Ditch the Frameworks
Responsible DI: Ditch the FrameworksResponsible DI: Ditch the Frameworks
Responsible DI: Ditch the Frameworks
 
FP adoption at REA
FP adoption at REAFP adoption at REA
FP adoption at REA
 
Lenses for the masses - introducing Goggles
Lenses for the masses - introducing GogglesLenses for the masses - introducing Goggles
Lenses for the masses - introducing Goggles
 
Good functional programming is good programming
Good functional programming is good programmingGood functional programming is good programming
Good functional programming is good programming
 
Data made out of functions
Data made out of functionsData made out of functions
Data made out of functions
 
Imagine a world without mocks
Imagine a world without mocksImagine a world without mocks
Imagine a world without mocks
 
2 Years of Real World FP at REA
2 Years of Real World FP at REA2 Years of Real World FP at REA
2 Years of Real World FP at REA
 
Your data structures are made of maths!
Your data structures are made of maths!Your data structures are made of maths!
Your data structures are made of maths!
 
The disaster of mutable state
The disaster of mutable stateThe disaster of mutable state
The disaster of mutable state
 

Recently uploaded

WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...WSO2
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...WSO2
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2
 
WSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
WSO2CON2024 - Why Should You Consider Ballerina for Your Next IntegrationWSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
WSO2CON2024 - Why Should You Consider Ballerina for Your Next IntegrationWSO2
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...masabamasaba
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2
 
WSO2Con2024 - Unleashing the Financial Potential of 13 Million People
WSO2Con2024 - Unleashing the Financial Potential of 13 Million PeopleWSO2Con2024 - Unleashing the Financial Potential of 13 Million People
WSO2Con2024 - Unleashing the Financial Potential of 13 Million PeopleWSO2
 
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...WSO2
 
WSO2Con2024 - Organization Management: The Revolution in B2B CIAM
WSO2Con2024 - Organization Management: The Revolution in B2B CIAMWSO2Con2024 - Organization Management: The Revolution in B2B CIAM
WSO2Con2024 - Organization Management: The Revolution in B2B CIAMWSO2
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...
WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...
WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...WSO2
 
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 

Recently uploaded (20)

WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
WSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
WSO2CON2024 - Why Should You Consider Ballerina for Your Next IntegrationWSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
WSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
WSO2Con2024 - Unleashing the Financial Potential of 13 Million People
WSO2Con2024 - Unleashing the Financial Potential of 13 Million PeopleWSO2Con2024 - Unleashing the Financial Potential of 13 Million People
WSO2Con2024 - Unleashing the Financial Potential of 13 Million People
 
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
WSO2Con2024 - Simplified Integration: Unveiling the Latest Features in WSO2 L...
 
WSO2Con2024 - Organization Management: The Revolution in B2B CIAM
WSO2Con2024 - Organization Management: The Revolution in B2B CIAMWSO2Con2024 - Organization Management: The Revolution in B2B CIAM
WSO2Con2024 - Organization Management: The Revolution in B2B CIAM
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...
WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...
WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...
 
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 

Applied category theory: the emerging science of compositionality