SlideShare ist ein Scribd-Unternehmen logo
1 von 169
Downloaden Sie, um offline zu lesen
Functional Programming
Journey Beyond Higher Order Functions
With “Tom the Happy Cat”
By Lex Sheehan
All Rights Reserved
Let’s learn
about
Functional
Programming
Learning Functional
Programming is not about
tightening your ass. It’s
about getting your head out
of it.
high order
functions in
javascript
Cool!
Tom discovers Lodash:
A handy JS Utility
library!
Map Examples
var users = [
{ 'user': alice },
{ 'user': bob }
];
_.map(users, 'user');
// => [alice, bob]
function square(n) {
return n * n;
}
_.map([4, 8], square);
// => [16, 64]
Map array of
users, by key
Apply square fcn
to array
No idea what “High
Order Functions” are
yet, but this Map
function sure is
handy!
Other Lodash goodies!
var users = [
{ 'user': alice, 'age': 38, 'active': true },
{ 'user': bob, 'age': 43, 'active': false }
];
_.filter(users, function(o) { return !o.active; });
// => objects for [‘alice’]
_.find(users, function(o) { return o.age < 40; });
// => object for 'bob'
Show me!
Cool!
JQuery’s got Map, too!
return names of checked items
import $ from 'jquery';
export function getCheckedFilterNames() {
var checkedFilters = $('.search__filters-box input:checkbox').filter(function () {
var checkedPos = $.inArray('checked', $(this)[0].nextElementSibling.classList);
return (checkedPos >= 0);
});
var checkedFilterNames = $.map(checkedFilters, function (checkboxInput) {
return ( $.trim(checkboxInput.nextElementSibling.nextSibling.textContent) );
});
return checkedFilterNames;
Now, watch me use
some of these helpers!
My Map Function
emailsWithPrimarySet = _.map(emails, function (email) {
if (typeof email.primary != 'undefined') {
email.primary = (email.email === MyAppState.newPrimaryEmailAddress);
}
return email;
});
Now, emails array’s
primary email is set.
What could possibly
be wrong about my
stateful function?
functional
programming in
Ruby
Data transformation
Rails.cache.fetch(:app_categories_and_counts) do
records = all(:include => [:app_cats])
records.map {|r| {
:id => r.id,
:name => r.name,
:cat_count => r.app_cats.count,
:cats => r.app_cats }
}
end
Map each with index
class Event < MonitorInfo
def self.json
all.each_with_index.map do |m, index|
{ :id => index,
:user => 'sensor',
:date => Time.now,
:policy => I18n.translate(m[:policyname])}
end
end
end
Grab each index
value and assign
‘em to :id
Chain high order functions!
def load_dest_addresses(addr)
return if addr.blank?
destination_addresses = DestinationAddressNode.new
destination_addresses.network_object = addr.split(',').reject{|a| a.nil? }.map do |aid|
leaf = RuleLeafNode.ne
leaf.uuid = aid
leaf
end
destination_addresses
end
Awesome!
Too
complicated!
We’re replacing
Functional Programming
and that “complicated”
language (Ruby)
What will Tom do Now?
a. Follow corporate cliff
b. Take a contracting job paying 2X
what he made working with cliff
Let’s Trash talk
java!
If you like design
patterns, use Java,
not Go.
WHY?
And WHAT are
design patterns?
OO Design Patterns
Creational
● Abstract
● Builder
● Factory
● Prototype
● Singleton
Structural
● Adapter
● Bridge
● Composite
● Decorator
● Facade
● Flyweight
● Proxy
Behavioral
● Chain
● Command
● Interpreter
● Iterator
● Mediator
● Memento
● Observer
● State
● Strategy
● Template
● Visitor
See github.com/
go-goodies/go_oops
When I see patterns in my programs, I consider it a sign of
trouble.
The shape of a program should reflect only the problem it
needs to solve.
Design pattern sub-language
It appears to me that stronger
languages can more easily remove
such duplication because
sometimes one has to make a kind
of sub-language to do it.
- Paul Graham
Sounds reasonable…
Got any examples?
Language Features that replace Design Patterns
● VisitorPattern <= Generics
● FactoryPattern <= Closures
● IteratorPattern <= Anonymous Functions
● StrategyPattern <= High Order Functions
But doesn’t the Go
standard library have
some design patterns
… ?
Go std. library
func printStats(d time.Duration) {
fileCount := 0
lineCount := 0
fset.Iterate(func(f *token.File) bool {
fileCount++
lineCount += f.LineCount()
return true
})
fmt.Printf(
"%s (%d files, %d lines, %d lines/s)n",
d, fileCount, lineCount, int64(float64(lineCount)/d.Seconds()),
)
}
Looks like that
struct implements
the Iterator
Pattern
func main() {
db, err := sql.Open("postgres", "postgres://user:pass@localhost/myapp")
if err != nil {
log.Fatal(err)
}
rows, err := db.Query("SELECT * FROM users")
if err != nil {
log.Fatal(err)
}
fmt.Printf("Users: %v", rows)
defer rows.Close()
}
sql registers
postgres driver
via Register fcn!
func Register(name string, driver driver.Driver) {
driversMu.Lock()
defer driversMu.Unlock()
if driver == nil {
panic("sql: Register driver is nil")
}
if _, dup := drivers[name]; dup {
panic("sql: Register called twice for driver " + name)
}
drivers[name] = driver
}
Go std. Library - factory Pattern
Get back on track!
Now, let’s bash Java’s infinite
levels of inheritance and type
hierarchies and JVM bloat.
ObjectRetrievalFailureException class from the Spring Framework
Cliff said
Ruby an FP was
complicated ??
Lies, Damn
Lies, and what
Cliff said!
Rob Pike says,
"Less is exponentially
more."
More FP in Ruby
@instance variable
A mutable property
that an object knows
about itself.
class PayrollCalculator
def self.calculate(payroll)
new(payroll).calculate
end
def initialize(payroll)
@payroll = payroll
end
private_class_method :new
def calculate
PayrollResult.new(
payroll: payroll,
paystubs: paystubs,
taxes: taxes,
debits: debits
)
end
def paystubs
calculate_paystubs(taxes, ...)
end
def debits
calculate_debits(taxes, ...)
end
def taxes
@taxes ||= calculate_taxes(@payroll)
end
end
Only 1 public
interface!
Look Ma!
memoization
Now, we can replace
a pure function call
with its value.
Our pure functions
give us referential
transparency.
Put some data in,
assert result is
what we expected.
We only need to
exercise one
interface in our
tests.
Using pure functions
can improve performance
and make testing a
breeze.
going deeper in FP
with Scala
What’s a diplomatic
way to replace a
team of average Java
programmers ?
Replace the entire
code base with Scala
and Play!
A big complex programming language.
Imperative, Object oriented,
Concurrent, functional
Gateway to large scale frameworks
Machine Learning, data streaming: spark, FLINK, Kafka...
Scala
First exposure to scala
class SearchEntityPriceResponse(
entitySearch: EntitySearch,
entitys: List[EntityInfo],
xmlLogHandler: XmlLogHandler) extends (Elem => Seq[EntityResult]) {
private val entitysByGtaCode = entitys.map(h => ((h.gtaCityCode.get + h.gtaPropertyCode.get).hashCode, h)).toMap
class … extends
looks like Java
Seq, map, toMap …
that’s something
different!
fp high order functions?
def apply(responseXml: Elem): Seq[EntityResult] = {
xmlLogHandler.logXml(responseXml)
val resultList = (responseXml  "Entity") map {
entityEl => {
}
val filteredResultList = resultList.flatten.groupBy(_.entity.id).map(g
=> merge(g._2)).toSeq
filteredResultList
}
entityEl => {
val rateResultList = createEntityRateResult(entityEl)
if (!rateResultList.isEmpty) {
val entityKey = ((entityEl  "Location"  "@Code").text
+ (entityEl  "Item"  "@Code").text).hashCode
val entityResult: EntityResult = new EntityResult()
// ...
rateResultList.foreach(_.result = entityResult)
Some(entityResult)
} else {
None
}
}
}
Scala’s functional
programming stuff
Currying
Tail Recursion
Higher Order Functions
Anonymous Functions
Lambda Functions
Partial Functions
Everything is an
Expression
Some? None?
They’re different
than high order
functions
Mutation is the exception and not the rule.
Functions r first class citizens.
Learning FP
is key to
understanding
Scala
Use of recursion to
produce results rather
than iteration.
Tom gets
discovered
I’ll share what I
learn ...
Look Ma! …
Map and Filter
functions in Go!
Nice article. How
would you like to
write a book?
To understand a science,
it is necessary to know
its history.
- Auguste comte
YIPEE!
Research time!
A Journey into
the history of FP
(according to Tom the happy cat)
George Boole (1815 - 1864)
Aristotle’s algebraic logic was in
prose. I translated it to symbols!
true = 1
false = 0
and = product (AxB)
or = sum(A+B)
Augustus De Morgan (1806 - 1871)
All logical operations can be
expressed in terms of and, or, and
not.
a ∧ b = ¬ ( (¬ a) ∨ (¬ b) )
a ∨ b = ¬ ( (¬ a) ∧ (¬ b) )
Friedrich Frege (1848 – 1925)
1. If the tree is still on the
power line, then we have no
power.
2. The tree is still on the
power line.
3. Therefore, we have no power.
I created Predicate Logic, studied
the use of functions in logic and was
the first to use currying!
Predicate Logic
{ a ⇒ b, b } ⊢ b
Lewis Carroll (1832 –1898)
Some FP libraries reference Lewis
Carroll’s work … ex: FantasyLand
I wrote Alice in Wonderland!
...maintaining a balance between sense
and nonsense, remaining logical, even
though it appeared at times to be
completely illogical.
Alfred Whitehead and Bertrand Russell (1903) ● Barbers Paradox
● Wrote a 450-page proof
to show that 1 + 1 = 2
You’re Frege’n
wrong!
Get your head
out of your
ass!
Moses Schonfinkel (1889–1942)
I invented combinatory logic.
A combinator is a higher order function
that uses only function application and
earlier defined combinators to define a
result from its arguments.
This replacement technique reduced
multiple function arguments to a single
argument, and was later known as currying.
Haskell Curry - 1927 I formalized combinatory logic,
creating The Lambda Calculus, where
lambda expressions represent
functional abstractions are
replaced by a limited set of
combinators.
Is that
where …
comes from?
Gerhard Gentzen (1936)
I used sequent calculus
(a series of true
statements) to build
arguments according to
rules and procedures of
inference making zero or
more assertions.
Alonzo Church (1930)
Kleene & Rosser
…I can improve
upon Principia
Mathematica with
effectively
computable
functions
It’s
non-terminating
Try again!
Kleene & Rosser
Alonzo Church (1930)
Simply Typed Lambda Calculus is
a typed system with high order
functions.
Alan Turing (1950) My Turing Machine can
compute anything your
Lambda Calculus can!
...using loop statements
and goto statements,
i.e., not recursion.
MacLane and Eilenberg (1945) We introduced the
concepts of categories,
functors, and natural
transformations.
…and composition of
maps that preserves
mathematical
structure!
John McCarthy (1950)
I created LISP … the first
Functional Programming
Language!
Curry-Howard-Lambek Correspondence (1969)
We discovered the one-to-one
correspondence between objects in
category theory, propositions in
logic, and types in programming
languages.
Curry-Howard-Lambek Correspondence (1969)
They are all
deeply
related?
Could this also be
related to flow-based
programming?
Discover
the answer
in my
book!
What can we do with
our flow based
components?
We can
COMPOSE!
Combine two smaller
functions to create a new
function that
accomplishes the same
goal as the two smaller
ones.
Function Composition!
Back to a Journey
into the History of
Functional
Programming
Roger Godement (1958)
I introduced the concept of Monads.
Moggi, Wadler, Jones (1991)
We need a framework to understand
how data flows in our apps. Given a
category C and an endomorphic
functor f with an object A …
Let’s actually use Monads in
Haskell to chain functions, handle
side effects, concurrent
processing, logging and more!
Gibbons, Oliveira (2006) We explored an FP solution to
the OOP iterator pattern.
Using imperative iterations
patterns we can return
transformed list of elements
the same shape!
Multi-paradigm languages
JS
Languages
we’ve
discussed
Multi-paradigm languages
JS
Languages we
will
discuss...
Category theory in
a nutshell
Category theory
Sets of
points and
arrows that
connect ‘em
Pure Function
If f(x) = x+2
and we input 3
we’ll always
get 5.
Fcn composition
f(g(1))
equals
10
g(x) = x + 2
f(x) = x2
+ 1
Does order
matter?
fcn composition
fcn composition
Order
matters!
Not commutative!
function composition is associative
Isn’t that
a math
thing?
Math… hmm …
Can we combine
our function
compositions?
… Let’s …
… add …
cows and
tigers
Let’s
multiply
cows and
tigers
What would
exponents of cows
with tigers and
elephants look
like?
I want more
math examples!
ISOmorphic Equations
(C,A) x (C,B) = (C, AxB)
(A,C) x (C,B) = (A+B, C)
(C x A,B) = (C, [A⇒B])
Laws of exponents
AC
x BC
= (AxB)C
CA
x CB
= C(A+B)
B(CxA)
= (BA
)C
I see the
correspondence!
√ Identity
x Commutative
√ Associative
√ Distributive
Does FP have
anything to do
with logic?
Both f and g are
required to produce
AxB
Both mean same
thing!
Either f or g are
required to produce
A+B
That’s an
if/then block
in code
Is go the best way to succinctly
express fp?
What can i study to be sure i
didn’t miss anything?
Haskell
learning Haskell
to gain a broader
understanding of
FP
Haskell code
humanize b = if b then "yes" else "no"
emphasize str = str ++ "!"
compose g f = x -> g (f x)
emphasizeHumanize = compose emphasize humanize
emphasizeHumanize True
=> "yes!"
emphasizeHumanize False
=> "no!"
The Haskell REPL
is like the
Interactive Ruby
Console.
Haskell type class hierarchy A Monad is a
Monoid and an
Applicative
What’s a
Category?
A sets of
points and
arrows that
connect ‘em
What’s a
Functor?
Our category is closed
under multiplication, has
an identity element, and
has a mapping function f(X)
(times 10)
A Functor maps
types to types
data Maybe a = Just a | Nothing
No more null
pointer
exceptions!
Example functor
Maybe is like an
optional value
instance Functor Maybe where
fmap f Nothing = Nothing
fmap f (Just x) = Just (f x)
How is
Maybe
defined?
What’s a
Monoid?
Monoids allow us
to combine
values.
Monoids are closed under
associative binary
operation and has an
identity element
We can think of a monoid as a
design pattern that allows us
to quickly reduce (or fold) on
a collection of a single type
in a parallel way.
Ouch! Thorium
might be a good
source of energy,
but it’s not
helping my yoga.
What? No
diagrams?
We saw
composition
before...
But that’s not
a Monoid!
Now, that’s a
Monoid ->
It returns the
same data type
that it’s fed.
It’s an
endomorphism.
‘en’ means “same”
‘morphism’ means
“function”
We can combine
them in any order
Which means we
can run them in
parallel !!
What’s a
Monad?
A Monad is just a
Monoid in the Category
of Endofunctors.
Duh!
Show me!
First, you must
answer a few
Q’s
Are you a
good person?
What changed
you?
Where will
you end up?
Let’s look at
the Mother
Theresa Monad
IN
nurtured
as
a
baby
IN
extreme
poverty
OUT
help
others
Monad
provides
structure
Show me another
example!
How ‘bout
the Marriage
Monad?
OH SHIT! Sorry
I asked!
No worries. Glad
you did.
Thanks! to the
people that helped
me through that
journey.
I used to think I
was entitled...
Then I studied the
life of Charlie
Munger.
Back to
Monads!
Explain that
chain of
boxes.
Move the
errors arrow
to the back
side
What’s going
on with the
2 arrows?
Isn’t there
only one
input?
We want to
create
pluggable
lego’s
Then, we could
decompose into a
toolbox of
components.
What’s up with
that purple
arrow?
Which fits
better?
How can we go from
a 1 input thing to
a 2 input thing?
With the
Monad’s bind
operation
What happens if we
get an error in the
middle of our flow?
Errors are
fast-tracked down
the Failure pipe.
Does Golang
have Monads?
Not OOTB but
you can write
your own.
Or copy the Lexical
Workflow Solution
code from my book.
Finally…
Let’s write some
functional go code!
Go
FP in Go
Why doesn’t
everyone use
FP in Go?
Imperative go
func SumLoop(nums []int) int {
sum := 0
for _, num := range nums {
sum += num
}
return sum
}
Recursive go
func SumRecursive(nums []int)
int {
if len(nums) == 0 {
return 0
}
return nums[0] +
… SumRecursive(nums[1:])
}
Imperative go
func loop(s []int,
… b *testing.B) {
for n := 0; n < b.N; n++ {
SumLoop(s)
}
}
Results: It took 46 ns/op.
Recursive go
func recursion(s []int,
… b *testing.B) {
for n := 0; n < b.N; n++ {
SumRecursive(s)
} }
Results: It took 178 ns/op.
Too slow!
What options
do we have
now?
Use FP for Monadic
workflow control.
Also checkout
Gleam.
References
Revenge of the Nerds
http://www.paulgraham.com/icad.html
Are Design Patterns Missing Language Features
http://wiki.c2.com/?AreDesignPatternsMissingLanguageFeatures
Embracing Functional Programming in Ruby
https://kellysutton.com/2017/09/13/embracing-functional-prog
ramming-in-ruby.html
References
go_oops
https://github.com/go-goodies/go_oops
Builder design pattern in Go Std Library
https://blog.golang.org/go-imagedraw-package
Available
on
amazon.com
What’s the
hottest
technology?
Interested in
Blockchain
Development?
We’ll learn about
cryptocurrencies.
Cryptoeconomics…
And implementing
Smart Contracts
on the Ethereum
blockchain.
Register at
https://cryptocurrencies
.developersclass.com
Thanks for
hanging around
til the end!
Lex Sheehan
LinkedIn: lexsheehan
Twitter: @lex_sheehan
Github: l3x
Video available at: https://www.youtube.com/watch?v=HRrP_P0PwFU
Give it a LIKE.
Thanks!
- Tom
This is the
first
presentation
I’ve done in a
while.
If I could edit this video, I’d mention that today, depending on the
application, matrix computations are likely to be much faster using an
imperative language like C. However, if we are ever fortunate enough to
see Tail Call Optimization (TCO) in Go, then Go might be a viable option,
especially given its concurrent programming features. TCO would open
up a lot of opportunities for Go programmers; that way, we wouldn’t have
to pay such a high price for recursion in Go. - Tom
I’ll smile
more in future
presentations
:-)

Weitere ähnliche Inhalte

Was ist angesagt?

Mark Seemann smashing together two repos using monoidal mappend
Mark Seemann smashing together two repos using monoidal mappendMark Seemann smashing together two repos using monoidal mappend
Mark Seemann smashing together two repos using monoidal mappendPhilip Schwarz
 
Point free or die - tacit programming in Haskell and beyond
Point free or die - tacit programming in Haskell and beyondPoint free or die - tacit programming in Haskell and beyond
Point free or die - tacit programming in Haskell and beyondPhilip Schwarz
 
The Functional Programmer's Toolkit (NDC London 2019)
The Functional Programmer's Toolkit (NDC London 2019)The Functional Programmer's Toolkit (NDC London 2019)
The Functional Programmer's Toolkit (NDC London 2019)Scott Wlaschin
 
BayFP: Concurrent and Multicore Haskell
BayFP: Concurrent and Multicore HaskellBayFP: Concurrent and Multicore Haskell
BayFP: Concurrent and Multicore HaskellBryan O'Sullivan
 
Functional Python Webinar from October 22nd, 2014
Functional Python Webinar from October 22nd, 2014Functional Python Webinar from October 22nd, 2014
Functional Python Webinar from October 22nd, 2014Reuven Lerner
 
The Functional Programming Toolkit (NDC Oslo 2019)
The Functional Programming Toolkit (NDC Oslo 2019)The Functional Programming Toolkit (NDC Oslo 2019)
The Functional Programming Toolkit (NDC Oslo 2019)Scott Wlaschin
 
Haskell retrospective
Haskell retrospectiveHaskell retrospective
Haskell retrospectivechenge2k
 
Developer’s viewpoint on swift programming language
Developer’s viewpoint on swift programming languageDeveloper’s viewpoint on swift programming language
Developer’s viewpoint on swift programming languageAzilen Technologies Pvt. Ltd.
 
Arriving at monads by going from pure-function composition to effectful-funct...
Arriving at monads by going from pure-function composition to effectful-funct...Arriving at monads by going from pure-function composition to effectful-funct...
Arriving at monads by going from pure-function composition to effectful-funct...Philip Schwarz
 
Oopsecondgrouppresentation 180726073512-converted (1)
Oopsecondgrouppresentation 180726073512-converted (1)Oopsecondgrouppresentation 180726073512-converted (1)
Oopsecondgrouppresentation 180726073512-converted (1)Hassan Hashmi
 
Building confidence in concurrent code with a model checker: TLA+ for program...
Building confidence in concurrent code with a model checker: TLA+ for program...Building confidence in concurrent code with a model checker: TLA+ for program...
Building confidence in concurrent code with a model checker: TLA+ for program...Scott Wlaschin
 
An Introduction to Functional Programming with Javascript
An Introduction to Functional Programming with JavascriptAn Introduction to Functional Programming with Javascript
An Introduction to Functional Programming with JavascriptDoug Sparling
 
The Java Script Programming Language
The  Java Script  Programming  LanguageThe  Java Script  Programming  Language
The Java Script Programming Languagezone
 
The JavaScript Programming Language
The JavaScript Programming LanguageThe JavaScript Programming Language
The JavaScript Programming LanguageRaghavan Mohan
 
JavaScript - Programming Languages course
JavaScript - Programming Languages course JavaScript - Programming Languages course
JavaScript - Programming Languages course yoavrubin
 
Kotlin presentation
Kotlin presentation Kotlin presentation
Kotlin presentation MobileAcademy
 
Java Building Blocks
Java Building BlocksJava Building Blocks
Java Building BlocksCate Huston
 
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
 
Session 3 - Object oriented programming with Objective-C (part 1)
Session 3 - Object oriented programming with Objective-C (part 1)Session 3 - Object oriented programming with Objective-C (part 1)
Session 3 - Object oriented programming with Objective-C (part 1)Vu Tran Lam
 

Was ist angesagt? (20)

Mark Seemann smashing together two repos using monoidal mappend
Mark Seemann smashing together two repos using monoidal mappendMark Seemann smashing together two repos using monoidal mappend
Mark Seemann smashing together two repos using monoidal mappend
 
Point free or die - tacit programming in Haskell and beyond
Point free or die - tacit programming in Haskell and beyondPoint free or die - tacit programming in Haskell and beyond
Point free or die - tacit programming in Haskell and beyond
 
The Functional Programmer's Toolkit (NDC London 2019)
The Functional Programmer's Toolkit (NDC London 2019)The Functional Programmer's Toolkit (NDC London 2019)
The Functional Programmer's Toolkit (NDC London 2019)
 
BayFP: Concurrent and Multicore Haskell
BayFP: Concurrent and Multicore HaskellBayFP: Concurrent and Multicore Haskell
BayFP: Concurrent and Multicore Haskell
 
Functional Python Webinar from October 22nd, 2014
Functional Python Webinar from October 22nd, 2014Functional Python Webinar from October 22nd, 2014
Functional Python Webinar from October 22nd, 2014
 
The Functional Programming Toolkit (NDC Oslo 2019)
The Functional Programming Toolkit (NDC Oslo 2019)The Functional Programming Toolkit (NDC Oslo 2019)
The Functional Programming Toolkit (NDC Oslo 2019)
 
Haskell retrospective
Haskell retrospectiveHaskell retrospective
Haskell retrospective
 
Developer’s viewpoint on swift programming language
Developer’s viewpoint on swift programming languageDeveloper’s viewpoint on swift programming language
Developer’s viewpoint on swift programming language
 
Arriving at monads by going from pure-function composition to effectful-funct...
Arriving at monads by going from pure-function composition to effectful-funct...Arriving at monads by going from pure-function composition to effectful-funct...
Arriving at monads by going from pure-function composition to effectful-funct...
 
Javascript
JavascriptJavascript
Javascript
 
Oopsecondgrouppresentation 180726073512-converted (1)
Oopsecondgrouppresentation 180726073512-converted (1)Oopsecondgrouppresentation 180726073512-converted (1)
Oopsecondgrouppresentation 180726073512-converted (1)
 
Building confidence in concurrent code with a model checker: TLA+ for program...
Building confidence in concurrent code with a model checker: TLA+ for program...Building confidence in concurrent code with a model checker: TLA+ for program...
Building confidence in concurrent code with a model checker: TLA+ for program...
 
An Introduction to Functional Programming with Javascript
An Introduction to Functional Programming with JavascriptAn Introduction to Functional Programming with Javascript
An Introduction to Functional Programming with Javascript
 
The Java Script Programming Language
The  Java Script  Programming  LanguageThe  Java Script  Programming  Language
The Java Script Programming Language
 
The JavaScript Programming Language
The JavaScript Programming LanguageThe JavaScript Programming Language
The JavaScript Programming Language
 
JavaScript - Programming Languages course
JavaScript - Programming Languages course JavaScript - Programming Languages course
JavaScript - Programming Languages course
 
Kotlin presentation
Kotlin presentation Kotlin presentation
Kotlin presentation
 
Java Building Blocks
Java Building BlocksJava Building Blocks
Java Building Blocks
 
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)
 
Session 3 - Object oriented programming with Objective-C (part 1)
Session 3 - Object oriented programming with Objective-C (part 1)Session 3 - Object oriented programming with Objective-C (part 1)
Session 3 - Object oriented programming with Objective-C (part 1)
 

Ähnlich wie Journey into History of FP

About Functional Programming
About Functional ProgrammingAbout Functional Programming
About Functional ProgrammingAapo Kyrölä
 
Real World Haskell: Lecture 1
Real World Haskell: Lecture 1Real World Haskell: Lecture 1
Real World Haskell: Lecture 1Bryan O'Sullivan
 
Douglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsDouglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsAjax Experience 2009
 
Intro to Functional Programming
Intro to Functional ProgrammingIntro to Functional Programming
Intro to Functional ProgrammingJordan Parmer
 
DataWeave 2.0 Language Fundamentals
DataWeave 2.0 Language FundamentalsDataWeave 2.0 Language Fundamentals
DataWeave 2.0 Language FundamentalsJoshua Erney
 
Booting into functional programming
Booting into functional programmingBooting into functional programming
Booting into functional programmingDhaval Dalal
 
Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009spierre
 
Twins: Object Oriented Programming and Functional Programming
Twins: Object Oriented Programming and Functional ProgrammingTwins: Object Oriented Programming and Functional Programming
Twins: Object Oriented Programming and Functional ProgrammingRichardWarburton
 
LISP: How I Learned To Stop Worrying And Love Parantheses
LISP: How I Learned To Stop Worrying And Love ParanthesesLISP: How I Learned To Stop Worrying And Love Parantheses
LISP: How I Learned To Stop Worrying And Love ParanthesesDominic Graefen
 
Douglas Crockford - Programming Style and Your Brain
Douglas Crockford - Programming Style and Your BrainDouglas Crockford - Programming Style and Your Brain
Douglas Crockford - Programming Style and Your BrainWeb Directions
 
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
 
JS Fest 2018. Douglas Crockford. The Better Parts
JS Fest 2018. Douglas Crockford. The Better PartsJS Fest 2018. Douglas Crockford. The Better Parts
JS Fest 2018. Douglas Crockford. The Better PartsJSFestUA
 
Introduction Functional Programming - Tech Hangout #11 - 2013.01.16
Introduction Functional Programming - Tech Hangout #11 - 2013.01.16Introduction Functional Programming - Tech Hangout #11 - 2013.01.16
Introduction Functional Programming - Tech Hangout #11 - 2013.01.16Innovecs
 

Ähnlich wie Journey into History of FP (20)

About Functional Programming
About Functional ProgrammingAbout Functional Programming
About Functional Programming
 
Real World Haskell: Lecture 1
Real World Haskell: Lecture 1Real World Haskell: Lecture 1
Real World Haskell: Lecture 1
 
Douglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsDouglas Crockford Presentation Goodparts
Douglas Crockford Presentation Goodparts
 
Intro to Functional Programming
Intro to Functional ProgrammingIntro to Functional Programming
Intro to Functional Programming
 
DataWeave 2.0 Language Fundamentals
DataWeave 2.0 Language FundamentalsDataWeave 2.0 Language Fundamentals
DataWeave 2.0 Language Fundamentals
 
Booting into functional programming
Booting into functional programmingBooting into functional programming
Booting into functional programming
 
Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009
 
Twins: Object Oriented Programming and Functional Programming
Twins: Object Oriented Programming and Functional ProgrammingTwins: Object Oriented Programming and Functional Programming
Twins: Object Oriented Programming and Functional Programming
 
Goodparts
GoodpartsGoodparts
Goodparts
 
Java 8
Java 8Java 8
Java 8
 
LISP: How I Learned To Stop Worrying And Love Parantheses
LISP: How I Learned To Stop Worrying And Love ParanthesesLISP: How I Learned To Stop Worrying And Love Parantheses
LISP: How I Learned To Stop Worrying And Love Parantheses
 
Fancy talk
Fancy talkFancy talk
Fancy talk
 
OOP
OOPOOP
OOP
 
Douglas Crockford - Programming Style and Your Brain
Douglas Crockford - Programming Style and Your BrainDouglas Crockford - Programming Style and Your Brain
Douglas Crockford - Programming Style and Your Brain
 
"Javascript" por Tiago Rodrigues
"Javascript" por Tiago Rodrigues"Javascript" por Tiago Rodrigues
"Javascript" por Tiago Rodrigues
 
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
 
JS Fest 2018. Douglas Crockford. The Better Parts
JS Fest 2018. Douglas Crockford. The Better PartsJS Fest 2018. Douglas Crockford. The Better Parts
JS Fest 2018. Douglas Crockford. The Better Parts
 
Introductory func prog
Introductory func progIntroductory func prog
Introductory func prog
 
Introduction Functional Programming - Tech Hangout #11 - 2013.01.16
Introduction Functional Programming - Tech Hangout #11 - 2013.01.16Introduction Functional Programming - Tech Hangout #11 - 2013.01.16
Introduction Functional Programming - Tech Hangout #11 - 2013.01.16
 
Java
JavaJava
Java
 

Kürzlich hochgeladen

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
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-...Steffen Staab
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
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 ...harshavardhanraghave
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
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.pdfkalichargn70th171
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 

Kürzlich hochgeladen (20)

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
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-...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
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 ...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
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
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 

Journey into History of FP