SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
Hardcore functional
programming
in Javascript
Leonardo Garcia Crespo
@leogcrespo
gh/leoasis
Agenda
● Currying & Partial Application
● Function Composition
● Fantasy Land
● Functors
● Monads
Currying
Currying:
f(x, y, z) = r
f(x) -> g(y) -> h(z) => r
function add(a) {
return function(b) {
return a + b;
};
}
var add1 = add(1);
add1(3); // 4
function makeFullName(first) {
return function(middle) {
return function(last) {
return first + ' ' + middle + ' ' + last;
};
};
}
var makeJerry = makeFullName('Jerry');
makeJerry('Lee')('Lewis');
var add1 = add(1);
add1(2); // 3
add(1)(2); // 3
add(1, 2); // ?
_.curry(fn)
var add = _.curry(function(a, b) {
return a + b;
});
var add1 = add(1);
add1(2); // 3
add(1)(2); // 3
Partial Application
var add1 = add(1);
var add1 = add.bind(null, 1);
var add1 = _.partial(add, 1);
Function Composition
(f . g)(x) = f(g(x))
_.compose(f, g)(x) == f(g(x))
_.compose(reverse, toUpper)
_.compose(reverse, toUpper)
"Hello"
_.compose(reverse, toUpper)
"Hello"
_.compose(reverse, toUpper)
"HELLO"
_.compose(reverse, toUpper)
"HELLO"
_.compose(reverse, toUpper)
"HELLO"
_.compose(reverse, toUpper)
"OLLEH"
_.compose(reverse, toUpper)
"OLLEH"
_.compose(reverse, toUpper)
"OLLEH"
Problem with _
Data comes first:
_.map(list, fn)
_.reduce(list, fn)
_.pluck(list, prop)
...
If data came last:
var add1ToAll = _.map(add1);
var names = _.map(get('name'));
Examples
Fantasy Land
Functor
Semigroup
Monoid
Apply
Chain
Applicative
Monad
Map for lists:
map :: (a -> b) -> [a] -> [b]
map(add1, [1, 2, 3]) // [2, 3, 4]
Functors
map :: (a -> b) -> F a -> F b
where F is a functor
Laws
Identity:
map(id, F a) == F a
map(id) == id
Composition:
map(f . g) == map(f) . map(g)
Maybe Functor
map(add1, Maybe(2)); // Maybe(3)
map(add1, Maybe(null)); // Maybe(null)
Promise Functor
map(add1, Promise(2)); // Promise(3)
map(add1, delay(3)); // Promise(...4)
Examples
Monads
A functor that also has:
of :: a -> M a
flatMap :: (a -> M b) -> M a -> M b
or chain :: M a -> (a -> M b) -> M b
Laws
Left Identity:
of(a).chain(f) == f(a)
Right Identity:
M(a).chain(of) == M(a)
Associativity:
M(a).chain(f).chain(g) == M(a).chain(x -> f(x).chain(g))
List Monad
Array.of(1); // [1]
var withNeg = function(a) { return [-a, a]; };
flatMap(withNeg, [1, 2, 3]); // [-1, 1, -2, 2, -3, 3]
[1, 2, 3].chain(withNeg);
Maybe Monad
Maybe.of(1); // Maybe(1)
var getName = function(obj) { return Maybe(obj.name); };
flatMap(getName, Maybe({name: 'John'})) // Maybe('John')
Maybe({name: 'John'}).chain(getName);
flatMap(getName, Maybe({age: 20})); // Maybe(null)
Promise Monad
Promise.of(1); // Promise(1)
// findTodo :: Number -> Promise(todo)
var findTodo = function(id) {
return fetchFromDb('todo', id);
};
flatMap(findTodo, Promise.of(123)); // Promise(...todo)
Promise.of(123).chain(getName);
Examples
Next
● Monoids
● Applicative Functors
● Learn a FP language!
● A LOT more than this
Why?
● Declarative (what vs how)
● Common Patterns
● Small functions
● Oriented to fns, not data
● Correctness (mathematics)
Resources
● http://learnyouahaskell.com/
● Hey Underscore! You're Doing it wrong (https:
//www.youtube.com/watch?v=m3svKOdZijA)
● https://github.com/fantasyland/fantasy-land
● http://functionaltalks.org
● Brian McKenna (@puffnfresh) & Brian Lonsdorf
(@drboolean) on Twitter
Thanks!
Qs?
Leonardo Garcia Crespo
@leogcrespo
gh/leoasis

Weitere ähnliche Inhalte

Was ist angesagt?

Map reduce functional programming
Map reduce   functional programmingMap reduce   functional programming
Map reduce functional programmingtusjain
 
Composite functions
Composite functionsComposite functions
Composite functionsShaun Wilson
 
Math - Operations on Functions, Kinds of Functions
Math - Operations on Functions, Kinds of FunctionsMath - Operations on Functions, Kinds of Functions
Math - Operations on Functions, Kinds of FunctionsChuckie Balbuena
 
Company_X_Data_Analyst_Challenge
Company_X_Data_Analyst_ChallengeCompany_X_Data_Analyst_Challenge
Company_X_Data_Analyst_ChallengeMark Yashar
 
Mi primer map reduce
Mi primer map reduceMi primer map reduce
Mi primer map reducebetabeers
 
Mi primer map reduce
Mi primer map reduceMi primer map reduce
Mi primer map reduceRuben Orta
 
Symmetry in the interrelation of flatMap/foldMap/traverse and flatten/fold/se...
Symmetry in the interrelation of flatMap/foldMap/traverse and flatten/fold/se...Symmetry in the interrelation of flatMap/foldMap/traverse and flatten/fold/se...
Symmetry in the interrelation of flatMap/foldMap/traverse and flatten/fold/se...Philip Schwarz
 
Data made out of functions
Data made out of functionsData made out of functions
Data made out of functionskenbot
 
Mathematical preliminaries in Automata
Mathematical preliminaries in AutomataMathematical preliminaries in Automata
Mathematical preliminaries in AutomataMobeen Mustafa
 
Composition Of Functions
Composition Of FunctionsComposition Of Functions
Composition Of Functionssjwong
 
2 1 Bzca5e
2 1 Bzca5e2 1 Bzca5e
2 1 Bzca5esilvia
 
Running Free with the Monads
Running Free with the MonadsRunning Free with the Monads
Running Free with the Monadskenbot
 

Was ist angesagt? (20)

Map reduce functional programming
Map reduce   functional programmingMap reduce   functional programming
Map reduce functional programming
 
Composite functions
Composite functionsComposite functions
Composite functions
 
Math - Operations on Functions, Kinds of Functions
Math - Operations on Functions, Kinds of FunctionsMath - Operations on Functions, Kinds of Functions
Math - Operations on Functions, Kinds of Functions
 
Alg2 lesson 7-7
Alg2 lesson 7-7Alg2 lesson 7-7
Alg2 lesson 7-7
 
Alg2 lesson 7.7
Alg2 lesson 7.7Alg2 lesson 7.7
Alg2 lesson 7.7
 
Company_X_Data_Analyst_Challenge
Company_X_Data_Analyst_ChallengeCompany_X_Data_Analyst_Challenge
Company_X_Data_Analyst_Challenge
 
Mi primer map reduce
Mi primer map reduceMi primer map reduce
Mi primer map reduce
 
Mi primer map reduce
Mi primer map reduceMi primer map reduce
Mi primer map reduce
 
Symmetry in the interrelation of flatMap/foldMap/traverse and flatten/fold/se...
Symmetry in the interrelation of flatMap/foldMap/traverse and flatten/fold/se...Symmetry in the interrelation of flatMap/foldMap/traverse and flatten/fold/se...
Symmetry in the interrelation of flatMap/foldMap/traverse and flatten/fold/se...
 
Laplace table
Laplace tableLaplace table
Laplace table
 
AP Calculus 1984 FRQs
AP Calculus 1984 FRQsAP Calculus 1984 FRQs
AP Calculus 1984 FRQs
 
composite functions
composite functionscomposite functions
composite functions
 
Data made out of functions
Data made out of functionsData made out of functions
Data made out of functions
 
Mathematical preliminaries in Automata
Mathematical preliminaries in AutomataMathematical preliminaries in Automata
Mathematical preliminaries in Automata
 
Composition Of Functions
Composition Of FunctionsComposition Of Functions
Composition Of Functions
 
MapReduce
MapReduceMapReduce
MapReduce
 
2 1 Bzca5e
2 1 Bzca5e2 1 Bzca5e
2 1 Bzca5e
 
Application of Derivative 5
Application of Derivative 5Application of Derivative 5
Application of Derivative 5
 
Composite functions
Composite functionsComposite functions
Composite functions
 
Running Free with the Monads
Running Free with the MonadsRunning Free with the Monads
Running Free with the Monads
 

Ähnlich wie Hardcore functional programming

Fp in scala with adts
Fp in scala with adtsFp in scala with adts
Fp in scala with adtsHang Zhao
 
4 2 operations on functions
4 2 operations on functions4 2 operations on functions
4 2 operations on functionshisema01
 
Introductory part of function for class 12th JEE
Introductory part of function for class 12th JEEIntroductory part of function for class 12th JEE
Introductory part of function for class 12th JEEMohanSonawane
 
Functional Programming for OO Programmers (part 2)
Functional Programming for OO Programmers (part 2)Functional Programming for OO Programmers (part 2)
Functional Programming for OO Programmers (part 2)Calvin Cheng
 
FUNCTION EX 1 PROBLEMS WITH SOLUTION UPTO JEE LEVEL
FUNCTION EX 1 PROBLEMS WITH SOLUTION UPTO JEE LEVELFUNCTION EX 1 PROBLEMS WITH SOLUTION UPTO JEE LEVEL
FUNCTION EX 1 PROBLEMS WITH SOLUTION UPTO JEE LEVELMohanSonawane
 
Monads from Definition
Monads from DefinitionMonads from Definition
Monads from DefinitionDierk König
 
10.5 more on language of functions x
10.5 more on language of functions x10.5 more on language of functions x
10.5 more on language of functions xmath260
 
5 algebra of functions
5 algebra of functions5 algebra of functions
5 algebra of functionsTzenma
 
Logarithms
LogarithmsLogarithms
Logarithmssupoteta
 
Basic Calculus.docx
Basic Calculus.docxBasic Calculus.docx
Basic Calculus.docxjericranoco
 
Functions and graphs
Functions and graphsFunctions and graphs
Functions and graphsSujata Tapare
 
Operations on Functions
Operations on FunctionsOperations on Functions
Operations on Functionsswartzje
 
From Javascript To Haskell
From Javascript To HaskellFrom Javascript To Haskell
From Javascript To Haskellujihisa
 
Fp in scala with adts part 2
Fp in scala with adts part 2Fp in scala with adts part 2
Fp in scala with adts part 2Hang Zhao
 
Functional Programming in PHP
Functional Programming in PHPFunctional Programming in PHP
Functional Programming in PHPpwmosquito
 
Introduction to Monads in Scala (2)
Introduction to Monads in Scala (2)Introduction to Monads in Scala (2)
Introduction to Monads in Scala (2)stasimus
 
Operations on Functions.pdf
Operations on Functions.pdfOperations on Functions.pdf
Operations on Functions.pdfJetCarilloToledo
 

Ähnlich wie Hardcore functional programming (20)

Monads do not Compose
Monads do not ComposeMonads do not Compose
Monads do not Compose
 
Fp in scala with adts
Fp in scala with adtsFp in scala with adts
Fp in scala with adts
 
4 2 operations on functions
4 2 operations on functions4 2 operations on functions
4 2 operations on functions
 
1. functions
1. functions1. functions
1. functions
 
Introductory part of function for class 12th JEE
Introductory part of function for class 12th JEEIntroductory part of function for class 12th JEE
Introductory part of function for class 12th JEE
 
Functional Programming for OO Programmers (part 2)
Functional Programming for OO Programmers (part 2)Functional Programming for OO Programmers (part 2)
Functional Programming for OO Programmers (part 2)
 
FUNCTION EX 1 PROBLEMS WITH SOLUTION UPTO JEE LEVEL
FUNCTION EX 1 PROBLEMS WITH SOLUTION UPTO JEE LEVELFUNCTION EX 1 PROBLEMS WITH SOLUTION UPTO JEE LEVEL
FUNCTION EX 1 PROBLEMS WITH SOLUTION UPTO JEE LEVEL
 
Clojure to Slang
Clojure to SlangClojure to Slang
Clojure to Slang
 
Monads from Definition
Monads from DefinitionMonads from Definition
Monads from Definition
 
10.5 more on language of functions x
10.5 more on language of functions x10.5 more on language of functions x
10.5 more on language of functions x
 
5 algebra of functions
5 algebra of functions5 algebra of functions
5 algebra of functions
 
Logarithms
LogarithmsLogarithms
Logarithms
 
Basic Calculus.docx
Basic Calculus.docxBasic Calculus.docx
Basic Calculus.docx
 
Functions and graphs
Functions and graphsFunctions and graphs
Functions and graphs
 
Operations on Functions
Operations on FunctionsOperations on Functions
Operations on Functions
 
From Javascript To Haskell
From Javascript To HaskellFrom Javascript To Haskell
From Javascript To Haskell
 
Fp in scala with adts part 2
Fp in scala with adts part 2Fp in scala with adts part 2
Fp in scala with adts part 2
 
Functional Programming in PHP
Functional Programming in PHPFunctional Programming in PHP
Functional Programming in PHP
 
Introduction to Monads in Scala (2)
Introduction to Monads in Scala (2)Introduction to Monads in Scala (2)
Introduction to Monads in Scala (2)
 
Operations on Functions.pdf
Operations on Functions.pdfOperations on Functions.pdf
Operations on Functions.pdf
 

Kürzlich hochgeladen

Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 

Kürzlich hochgeladen (20)

Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

Hardcore functional programming