SlideShare a Scribd company logo
1 of 209
Category Theory for
beginners
Melbourne Scala User Group Feb 2015
@KenScambler
A B
C
Abstract maths… for us?
Dizzyingly abstract branch of maths
“Abstract nonsense”?
Programming = maths
Programming = abstraction
Really useful to programming!
The plan
Basic Category Theory concepts
New vocabulary (helpful for further reading)
How it relates to programming
Category Theory as seen by maths versus FP
A bit of background
1940s Eilenberg, Mac Lane invent Category Theory
1958 Monads discovered by Godement
In programming:
1990 Moggi, Wadler apply monads to programming
2006 “Applicative Programming with Effects” McBride &
Paterson
2006 “Essence of the Iterator Pattern” Gibbons & Oliveira
I. Categories
Category
Objects
Category
Objects
Arrows or
morphisms
Category
Objects
Arrows
Domain f
dom(f)
Category
Objects
Arrows
Domain/Codomain f
cod(f)
dom(f)
Category
Objects
Arrows
Domain/Codomain
dom(g)
cod(g)
g
Category
Objects
Arrows
Domain/Codomain
Category
Objects
Arrows
Domain/Codomain
Composition
f
Category
Objects
Arrows
Domain/Codomain
Composition
f
g
Category
Objects
Arrows
Domain/Codomain
Composition
f
g
g ∘ f
Category
Objects
Arrows
Domain/Codomain
Composition
f
Category
Objects
Arrows
Domain/Codomain
Composition
f
h
Category
Objects
Arrows
Domain/Codomain
Composition
f
h
h ∘ f
Category
Objects
Arrows
Domain/Codomain
Composition
Identity
Category
Compose
∘ : (B  C)  (A  B)  (A 
C)
Identity
id : A  A
Category Laws
Associative Law
(f ∘ g) ∘ h = f ∘ (g ∘ h )
Identity Laws
f ∘ id = id ∘ f = f
Associative law
(f ∘ g) ∘ h = f ∘ (g ∘ h )
f
g
h
(g ∘ h)
(f ∘ g)
Associative law
(f ∘ g) ∘ h = f ∘ (g ∘ h )
f
g
h
(g ∘ h)
(f ∘ g)
Associative law
(f ∘ g) ∘ h = f ∘ (g ∘ h )
f
g
h
(g ∘ h)
(f ∘ g)
Associative law
(f ∘ g) ∘ h = f ∘ (g ∘ h )
f
g
h
(g ∘ h)
(f ∘ g)
Associative law
(f ∘ g) ∘ h = f ∘ (g ∘ h )
f
g
h
(g ∘ h)
(f ∘ g)
Associative law
(f ∘ g) ∘ h = f ∘ (g ∘ h )
f
g
h
(g ∘ h)
(f ∘ g)
Associative law
(f ∘ g) ∘ h = f ∘ (g ∘ h )
f
g
h
(g ∘ h)
(f ∘ g)
Identity laws
f ∘ id = id ∘ f = f
f
id id
Identity laws
f ∘ id = id ∘ f = f
f
id id
Identity laws
f ∘ id = id ∘ f = f
f
id id
Identity laws
f ∘ id = id ∘ f = f
f
id id
Examples
Infinite categories
Finite categories
Objects can represent anything
Arrows can represent anything
As long as we have composition and identity!
Sets & functions
Person
String Integer
bestFriend
length
name age
+1
Sets & functions
Infinite arrows from composition
+1∘ length ∘ name
bestFriend ∘ bestFriend
bestFriend ∘ bestFriend ∘ bestFriend
+1∘ age∘ bestFriend
Sets & functions
Objects
Arrows
Composition
Identity
Sets & functions
Objects = sets (or types)
Arrows = functions
Composition = function composition
Identity = identity function
Zero
One
Two
Three
Class hierarchy
IFruit
IBanana
AbstractBanana
BananaImpl MockBanana
Tool
Spanner
Class hierarchy
Objects
Arrows
Composition
Identity
Class hierarchy
Objects = classes
Arrows = “extends”
Composition = “extends” is transitive
Identity = trivial
Class hierarchy
Partially ordered sets (posets)
Objects = elements in the set
Arrows = ordering relation ≤
Composition = ≤ is transitive
Identity = trivial
World Wide Web
www.naaawcats.com
No dogs allowed!
www.robodogs.com
See here for more
robots
www.coolrobots.com
BUY NOW!!!!
World Wide Web
Objects = webpages
Arrows = hyperlinks
Composition = Links don’t compose
Identity
World Wide Web
Graphs
Objects = nodes
Arrows = edges
Composition = Edges don’t compose
Identity
“Free Category” from
graphs!
Objects = nodes
Arrows = paths (0 to many edges)
Composition = aligning paths end to
end
Identity = you’re already there
Categories in code
trait Category[Arrow[_,_]] {
def compose[A,B,C](
c: Arrow[B,C],
d: Arrow[A,B]): Arrow[A,C]
def id[A]: Arrow[A,A]
}
Category of Types & Functions
object FnCat
extends Category[Function1] {
def compose[A,B,C](
c: B => C,
d: A => B): A => C = {
a => c(d(a))
}
def id[A]: A => A = (a => a)
}
Category of Garden Hoses
sealed trait Hose[In, Out] {
def leaks: Int
def kinked: Boolean
def >>[A](in: Hose[A, In]):
Hose[A, Out]
def <<[A](out: Hose[Out, A]):
Hose[In, A]
}
Category of Garden Hoses
[live code example]
Categories embody the
principle of
strongly-typed
composability
II. Functors
Functors
Functors map between categories
Objects  objects
Arrows  arrows
Preserves composition & identity
Functor laws
Composition Law
F(g ∘ f) = F(g) ∘ F(f)
Identity Law
F(idA) = idF(A)
C
F
DCategory Category
Functor
C
F
DCategory Category
Functor
CatCategory of categories
C
F
DCategory Category
Functor
CatCategory of categories
Objects = categories
Arrows = functors
Composition = functor composition
Identity = Identity functor
C
F
D
A
B
C
g ∘ f
f
g
C
F
D
A
B
C
g ∘ f
f
g
F(A)
C
F
D
A
B
C
g ∘ f
f
g
F(A)
F(B)
C
F
D
A
B
C
g ∘ f
f
g
F(A)
F(B)
F(C)
C
F
D
A
B
C
g ∘ f
f
g
F(A)
F(B)
F(C)
F(f)
C
F
D
A
B
C
g ∘ f
f
g
F(A)
F(B)
F(C)
F(f)
F(g
)
C
F
D
A
B
C
g ∘ f
f
g
F(A)
F(B)
F(C)
F(f)
F(g
)
F(g ∘ f)
g ∘ f
f
g
F(f)
F(g
)
F(g ∘ f)
Composition Law
F(g ∘ f) = F(g) ∘ F(f)
g ∘ f
f
g
F(f)
F(g
)
F(g ∘ f)
Composition Law
F(g ∘ f) = F(g) ∘ F(f)
g ∘ f
f
g
F(f)
F(g
)
F(g ∘ f)
Composition Law
F(g ∘ f) = F(g) ∘ F(f)
g ∘ f
f
g
F(f)
F(g
)
F(g ∘ f)
Composition Law
F(g ∘ f) = F(g) ∘ F(f)
g ∘ f
f
g
F(f)
F(g
)
F(g ∘ f)
Composition Law
F(g ∘ f) = F(g) ∘ F(f)
g ∘ f
f
g
F(f)
F(g
)
F(g ∘ f)
Composition Law
F(g ∘ f) = F(g) ∘ F(f)
g ∘ f
f
g
F(f)
F(g
)
F(g ∘ f)
Composition Law
F(g ∘ f) = F(g) ∘ F(f)
g ∘ f
f
g
F(f)
F(g
)
F(g ∘ f)
Composition Law
F(g ∘ f) = F(g) ∘ F(f)
g ∘ f
f
g
F(f)
F(g
)
Composition Law
F(g ∘ f) = F(g) ∘ F(f)
F(g) ∘ F(f)
g ∘ f
f
g
F(f)
F(g
)
Composition Law
F(g ∘ f) = F(g) ∘ F(f)
F(g) ∘ F(f)
F(g ∘ f)
Identity law
F(idA)= idF(A)
A
Identity law
F(idA)= idF(A)
A
idA
Identity law
F(idA)= idF(A)
A
idA
F(idA)
Identity law
F(idA)= idF(A)
A
Identity law
F(idA)= idF(A)
A F(A)
Identity law
F(idA)= idF(A)
A F(A)
idF(A)
Identity law
F(idA)= idF(A)
A F(A)
idF(A)
A
idA
F(idA)
Terminology
homomorphism
Terminology
homomorphism
Same
Terminology
homomorphism
Same-shape-ism
Terminology
homomorphism
“structure preserving map”
Terminology
homomorphism
Functors are
“category homomorphisms”
Functors in code
trait Functor[F[_]] {
def map[A,B](fa: F[A],
f: A => B): F[B]
}
Functors in code
trait Functor[F[_]] {
def map[A,B](fa: F[A],
f: A => B): F[B]
}
Objects to objects
Functors in code
trait Functor[F[_]] {
def map[A,B](fa: F[A],
f: A => B): F[B]
}
Arrows to arrows
Functors in code
trait Functor[F[_]] {
def map[A,B]:
(A => B) => (F[A] => F[B])
}
Arrows to arrows
Functors laws in code
fa.map(f).map(g)
==
fa.map(g compose f)
Functors laws in code
fa.map(a => a) == fa
Terminology
endomorphism
Terminology
endomorphism
Within
Terminology
endomorphism
Within -shape-ism
Terminology
endomorphism
“a mapping from
something back to itself”
Terminology
endo
“a mapping from
something back to itself”
Endofunctors
In Scala, all our functors
are
actually endofunctors.
Type
F
Category Category
Endofunctor Type
Endofunctors
Luckily, we can represent
any functor in our type
system as some F[_]
Type F
Category Category
Endofunctor
Type
List Functor
sealed trait List[+A]
case class Cons(head: A, tail: List[A])
extends List[A]
case object Nil extends List[Nothing]
List Functor
sealed trait List[+A] {
def map[B](f: A => B): List[B] =
this match {
case Cons(h,t) => Cons(f(h), t map f)
case Nil => Nil
}
}
}
List Functor
potatoList
.map(mashEm)
.map(boilEm)
.map(stickEmInAStew)
List Functor
userList
.map(_.name)
.map(_.length)
.map(_ + 1)
.map(_.toString)
Other functors
trait Tree[A]
trait Future[A]
trait Process[A]
trait Command[A]
X => A
(X, A)
trait Option[A]
Functors
Fundamental concept in Category Theory
Super useful
Everywhere
Staple of functional programming
Write code that’s ignorant of unnecessary context
III. Monoids
Monoids
Some set we’ll call M
Compose
• : M × M  M
Identity
id : M
Monoid Laws
Associative Law
(f • g) • h = f • (g • h )
Identity Laws
f • id = id • f = f
Category Laws
Associative Law
(f ∘ g) ∘ h = f ∘ (g ∘ h )
Identity Laws
f ∘ id = id ∘ f = f
Monoids
Compose
• : M × M  M
Identity
id : M
Category
Compose
∘ : (B  C)  (A  B)  (A 
C)
Identity
id : A  A
Category with 1 object
Compose
∘ : (A  A)  (A  A)  (A 
A)
Identity
id : A  A
Category with 1 object
Compose
∘ : M  M M
Identity
id : M
Monoids are categories
Each arrow is an element
in the monoid
Only one object
Monoids are categories
Objects = placeholder singleton
Arrows = elements of the monoid
Composition = •
Identity = id
Only one object
Each arrow is an element
in the monoid
M
H
N
Monoid Monoid
Monoid homomorphism
(SM, •M, idM) (SN, •N, idN)
M
H
N
Monoid Monoid
Monoid homomorphism
(SM, •M, idM) (SN, •N, idN)
MonCategory of monoids
M
H
N
Monoid Monoid
Monoid homomorphism
(SM, •M, idM) (SN, •N, idN)
MonCategory of monoids
Objects = monoids
Arrows = monoid homomorphisms
Composition = function composition
Identity = Identity function
M H
N
SM SN
“structure-preserving map”
Set Set
function
h
Sets
Where h preserves composition &
identity
Example
String length is a monoid
homomorphism from
(String, +, "") to
(Int, +, 0)
Preserves identity
Preserves composition
"".length == 0
(str1 + str2).length =
str1.length + str2.length
Monoids in code
trait Monoid[M] {
def compose(a: M, b: M): M
def id: M
}
Monoids in code
def foldMonoid[M: Monoid](
ms: Seq[M]): M = {
ms.foldLeft(Monoid[M].id)
(Monoid[M].compose)
}
Int / 0 / +
import IntAddMonoid._
foldMonoid[Int](Seq(
1,2,3,4,5,6))
 21
Int / 1 / *
import IntMultMonoid._
foldMonoid[Int](Seq(
1,2,3,4,5,6))
 720
String / "" / +
foldMonoid[String](Seq(
"alea",
"iacta",
"est"))
 ”aleaiactaest"
Endos / id / ∘
def mash: Potato => Potato
def addOne: Int => Int
def flipHorizontal: Shape => Shape
def bestFriend: Person => Person
A=>A / a=>a / compose
foldMonoid[Int => Int](Seq(
_ + 12,
_ * 2,
_ - 3))
 (n: Int) => ((n + 12) * 2) - 3
Are chairs monoids?
Chair
Composition =
You can’t turn two chairs into one
Identity =
Chair stack
Chair stack
Composition = stack them on top
Identity = no chairs
Chair Stack is
the
free monoid of
chairs
Protip: just take 0-to-many of
anything, and you get a
monoid for free
…almost
Real monoids don’t topple;
they keep scaling
Monoids embody the
principle of
weakly-typed
composability
IV. Products & sums
Algebraic Data Types
List[A]
- Cons(A, List[A])
- Nil
Option[A]
- Some(A)
- None
BusinessResult[A]
- OK(A)
- Error
Wiggles
- YellowWiggle
- BlueWiggle
- RedWiggle
- PurpleWiggle
Address(Street, Suburb,
Postcode, State)
Algebraic Data Types
Cons(A × List[A])
+ Nil
Some(A)
+ None
OK(A)
+ Error
YellowWiggle
+ BlueWiggle
+ RedWiggle
+ PurpleWiggle
Street × Suburb × Postcode × State
Algebraic Data Types
A × List[A] + 1
A + 1
A + 1
4
Street × Suburb × Postcode × State
Algebraic Data Types
A × List[A] + 1
A + 1
A + 1
4
Street × Suburb × Postcode × State
isomorphic
Terminology
isomorphism
Terminology
isomorphism
Equal
Terminology
isomorphism
Equal-shape-ism
Terminology
isomorphism
“Sorta kinda the same-ish”
but I want to sound really
smart
- Programmers
Terminology
isomorphism
“Sorta kinda the same-ish”
but I want to sound really
smart
- Programmers
Terminology
isomorphism
One-to-one mapping
between two objects so
you can go back-and-forth
without losing information
Isomorphism
object
object
arrows
Isomorphism
Same as
identity
Isomorphism
Same as
identity
These 4
Shapes
Wiggles
Set
functions
Set
These 4
Shapes
Wiggles
These 4
Shapes
Wiggles
There can be lots of
isos between two
objects!
If there’s at least one, we
can say they are
isomorphic
or A ≅ B
Products
A × BA B
first seco
nd
Given the product of A-and-B,
we can obtain both A and B
Sums
A + BA B
left right
Given an A, or a B, we have
the sum A-or-B
Opposite categories
C Cop
A
B
C
g ∘ f
f
g
A
B
C
fop ∘ gop
fop
gop
Isomorphic!
A
B
C
g ∘ f
f
g
A
B
C
f ∘ g
f
g
Just flip the arrows, and
reverse composition!
A
A×B
B
A product in C is a sum in Cop
A sum in C is a product in Cop
A+B
B
A
C Cop
Sums ≅ Products!
Terminology
dual
An object and its equivalent in the
opposite category are
to each other.
Terminology
Co-(thing)
Often we call something’s dual a
Terminology
Coproducts
Sums are also called
V. Composable
systems
Growing a system
Banana
Growing a system
Growing a system
Growing a system
Bunch
Growing a system
Bunch
Bunch
Growing a system
Bunch
Bunch
Bunch
Growing a system
Bunch
Bunch
Bunch
BunchManager
Growing a system
Bunch
Bunch
Bunch
BunchManager
AnyManagers
compose
compose
etc…
Using composable
abstractions means your
code can grow without
getting more complex
Categories and Monoids
capture the essence of
composition in software!
Look for Monoids and
Categories in your domain
where you can
You can even bludgeon non-
composable things into free
monoids and free categories
VI. Abstraction
Spanner
Spanner
AbstractSpanner
Spanner
AbstractSpanner
AbstractToolThing
Spanner
AbstractSpanner
AbstractToolThing
GenerallyUsefulThing
Spanner
AbstractSpanner
AbstractToolThing
GenerallyUsefulThing
AbstractGenerallyUsefulThingFactory
Spanner
AbstractSpanner
AbstractToolThing
GenerallyUsefulThing
AbstractGenerallyUsefulThingFactory
WhateverFactoryBuilder
That’s not what
abstraction
means.
Code shouldn’t know
things that aren’t
needed.
def getNames(users: List[User]):
List[Name] = {
users.map(_.name)
}
def getNames(users: List[User]):
List[Name] = {
println(users.length)
users.map(_.name)
}
Over time…
def getNames(users: List[User]):
List[Name] = {
println(users.length)
if (users.length == 1) {
s”${users.head.name} the one and only"
} else {
users.map(_.name)
}
}
“Oh, now we need
the roster of names!
A simple list won’t
do.”
def getRosterNames(users: Roster[User]):
Roster[Name] = {
users.map(_.name)
}
def getRosterNames(users: Roster[User]):
Roster[Name] = {
LogFactory.getLogger.info(s”When you
party with ${users.rosterTitle}, you must
party hard!")
users.map(_.name)
}
Over time…
def getRosterNames(users: Roster[User]):
Roster[Name] = {
LogFactory.getLogger.info(s"When you
party with ${users.rosterTitle}, you must
party hard!")
if (users.isFull) EmptyRoster("(everyone)
")
else users.map(_.name)
}
When code knows too much,
soon new things will appear
that actually require the other
stuff.
Coupling has
increased. The mixed
concerns will tangle
and snarl.
Code is rewritten each time for
trivially different requirements
def getNames[F: Functor](users: F[User]):
F[Name] = {
Functor[F].map(users)(_.name)
}
getNames(List(alice, bob, carol))
getNames(Roster(alice, bob, carol))
Not only is the abstract code
not weighed down with
useless junk, it can’t be!
Reusable out of the box!
Abstraction is
about hiding
unnecessary
information. This
a good thing.
We actually know more about what the code
does, because we have stronger
guarantees!
We’ve seen deep
underlying patterns
beneath superficially
different things
A×B A+B
Just about everything
ended up being in a
category, or being one.
There is no better
way to understand
the patterns
underlying software
than studying
Category Theory.
Further reading
Awodey, “Category Theory”
Lawvere & Schanuel, “Conceptual Mathematics: an
introduction to categories”
Jeremy Kun, “Math ∩ Programming” at
http://jeremykun.com/
Gabriel Gonzalez “Haskell for all”
http://www.haskellforall.com/2012/08/the-category-design-
pattern.html
http://www.haskellforall.com/2014/04/scalable-program-
architectures.html

More Related Content

What's hot

Prefix, Infix and Post-fix Notations
Prefix, Infix and Post-fix NotationsPrefix, Infix and Post-fix Notations
Prefix, Infix and Post-fix NotationsAfaq Mansoor Khan
 
Master method
Master method Master method
Master method Rajendran
 
Python Workshop Part 2. LUG Maniapl
Python Workshop Part 2. LUG ManiaplPython Workshop Part 2. LUG Maniapl
Python Workshop Part 2. LUG ManiaplAnkur Shrivastava
 
The Power of Composition (NDC Oslo 2020)
The Power of Composition (NDC Oslo 2020)The Power of Composition (NDC Oslo 2020)
The Power of Composition (NDC Oslo 2020)Scott Wlaschin
 
Programming For Problem Solving Lecture Notes
Programming For Problem Solving Lecture NotesProgramming For Problem Solving Lecture Notes
Programming For Problem Solving Lecture NotesSreedhar Chowdam
 
Chapter 2: Relations
Chapter 2: RelationsChapter 2: Relations
Chapter 2: Relationsnszakir
 
Functional Programming 101 with Scala and ZIO @FunctionalWorld
Functional Programming 101 with Scala and ZIO @FunctionalWorldFunctional Programming 101 with Scala and ZIO @FunctionalWorld
Functional Programming 101 with Scala and ZIO @FunctionalWorldJorge Vásquez
 
Functional Error Handling with Cats
Functional Error Handling with CatsFunctional Error Handling with Cats
Functional Error Handling with CatsMark Canlas
 
Why functional programming and category theory strongly matters
Why functional programming and category theory strongly mattersWhy functional programming and category theory strongly matters
Why functional programming and category theory strongly mattersPiotr Paradziński
 
C Recursion, Pointers, Dynamic memory management
C Recursion, Pointers, Dynamic memory managementC Recursion, Pointers, Dynamic memory management
C Recursion, Pointers, Dynamic memory managementSreedhar Chowdam
 
design and analysis of algorithm Lab files
design and analysis of algorithm Lab filesdesign and analysis of algorithm Lab files
design and analysis of algorithm Lab filesNitesh Dubey
 
Arrays In Python | Python Array Operations | Edureka
Arrays In Python | Python Array Operations | EdurekaArrays In Python | Python Array Operations | Edureka
Arrays In Python | Python Array Operations | EdurekaEdureka!
 

What's hot (20)

Beyond Scala Lens
Beyond Scala LensBeyond Scala Lens
Beyond Scala Lens
 
inheritance
inheritanceinheritance
inheritance
 
Functions in mathematics
Functions in mathematicsFunctions in mathematics
Functions in mathematics
 
Object Oriented Programming
Object Oriented ProgrammingObject Oriented Programming
Object Oriented Programming
 
Relations
RelationsRelations
Relations
 
Prefix, Infix and Post-fix Notations
Prefix, Infix and Post-fix NotationsPrefix, Infix and Post-fix Notations
Prefix, Infix and Post-fix Notations
 
Master method
Master method Master method
Master method
 
Python Workshop Part 2. LUG Maniapl
Python Workshop Part 2. LUG ManiaplPython Workshop Part 2. LUG Maniapl
Python Workshop Part 2. LUG Maniapl
 
The Power of Composition (NDC Oslo 2020)
The Power of Composition (NDC Oslo 2020)The Power of Composition (NDC Oslo 2020)
The Power of Composition (NDC Oslo 2020)
 
Programming For Problem Solving Lecture Notes
Programming For Problem Solving Lecture NotesProgramming For Problem Solving Lecture Notes
Programming For Problem Solving Lecture Notes
 
Chapter 2: Relations
Chapter 2: RelationsChapter 2: Relations
Chapter 2: Relations
 
Euler phi
Euler phiEuler phi
Euler phi
 
Functional Programming 101 with Scala and ZIO @FunctionalWorld
Functional Programming 101 with Scala and ZIO @FunctionalWorldFunctional Programming 101 with Scala and ZIO @FunctionalWorld
Functional Programming 101 with Scala and ZIO @FunctionalWorld
 
Applicative style programming
Applicative style programmingApplicative style programming
Applicative style programming
 
Set Theory Presentation
Set Theory PresentationSet Theory Presentation
Set Theory Presentation
 
Functional Error Handling with Cats
Functional Error Handling with CatsFunctional Error Handling with Cats
Functional Error Handling with Cats
 
Why functional programming and category theory strongly matters
Why functional programming and category theory strongly mattersWhy functional programming and category theory strongly matters
Why functional programming and category theory strongly matters
 
C Recursion, Pointers, Dynamic memory management
C Recursion, Pointers, Dynamic memory managementC Recursion, Pointers, Dynamic memory management
C Recursion, Pointers, Dynamic memory management
 
design and analysis of algorithm Lab files
design and analysis of algorithm Lab filesdesign and analysis of algorithm Lab files
design and analysis of algorithm Lab files
 
Arrays In Python | Python Array Operations | Edureka
Arrays In Python | Python Array Operations | EdurekaArrays In Python | Python Array Operations | Edureka
Arrays In Python | Python Array Operations | Edureka
 

Viewers also liked

Closing the gap between Spend Analytics & Category Management_Weatherford
Closing the gap between Spend Analytics & Category Management_WeatherfordClosing the gap between Spend Analytics & Category Management_Weatherford
Closing the gap between Spend Analytics & Category Management_WeatherfordZycus
 
Product and category management in abms university
Product and category management in abms universityProduct and category management in abms university
Product and category management in abms universitytomii01
 
Jan Sass Hvyass, Director of Procurement at Beumer Group - Organising a globa...
Jan Sass Hvyass, Director of Procurement at Beumer Group - Organising a globa...Jan Sass Hvyass, Director of Procurement at Beumer Group - Organising a globa...
Jan Sass Hvyass, Director of Procurement at Beumer Group - Organising a globa...Global Business Events
 
Introduction to Category Management And Assortment Planning in the Retail Ind...
Introduction to Category Management And Assortment Planning in the Retail Ind...Introduction to Category Management And Assortment Planning in the Retail Ind...
Introduction to Category Management And Assortment Planning in the Retail Ind...KINDUZ Consulting
 

Viewers also liked (8)

Closing the gap between Spend Analytics & Category Management_Weatherford
Closing the gap between Spend Analytics & Category Management_WeatherfordClosing the gap between Spend Analytics & Category Management_Weatherford
Closing the gap between Spend Analytics & Category Management_Weatherford
 
Procurement development
Procurement developmentProcurement development
Procurement development
 
ABC del Category Management
ABC del Category ManagementABC del Category Management
ABC del Category Management
 
Product and category management in abms university
Product and category management in abms universityProduct and category management in abms university
Product and category management in abms university
 
Jan Sass Hvyass, Director of Procurement at Beumer Group - Organising a globa...
Jan Sass Hvyass, Director of Procurement at Beumer Group - Organising a globa...Jan Sass Hvyass, Director of Procurement at Beumer Group - Organising a globa...
Jan Sass Hvyass, Director of Procurement at Beumer Group - Organising a globa...
 
Category Management Tools
Category Management ToolsCategory Management Tools
Category Management Tools
 
Introduction to Category Management And Assortment Planning in the Retail Ind...
Introduction to Category Management And Assortment Planning in the Retail Ind...Introduction to Category Management And Assortment Planning in the Retail Ind...
Introduction to Category Management And Assortment Planning in the Retail Ind...
 
Category Management
Category Management Category Management
Category Management
 

Similar to Category theory for beginners

Scala categorytheory
Scala categorytheoryScala categorytheory
Scala categorytheoryMeetu Maltiar
 
Scala categorytheory
Scala categorytheoryScala categorytheory
Scala categorytheoryKnoldus Inc.
 
Power of functions in a typed world
Power of functions in a typed worldPower of functions in a typed world
Power of functions in a typed worldDebasish Ghosh
 
Algebraic Data Types and Origami Patterns
Algebraic Data Types and Origami PatternsAlgebraic Data Types and Origami Patterns
Algebraic Data Types and Origami PatternsVasil Remeniuk
 
The Essence of the Iterator Pattern
The Essence of the Iterator PatternThe Essence of the Iterator Pattern
The Essence of the Iterator PatternEric Torreborre
 
Oh, All the things you'll traverse
Oh, All the things you'll traverseOh, All the things you'll traverse
Oh, All the things you'll traverseLuka Jacobowitz
 
The Essence of the Iterator Pattern (pdf)
The Essence of the Iterator Pattern (pdf)The Essence of the Iterator Pattern (pdf)
The Essence of the Iterator Pattern (pdf)Eric Torreborre
 
Optics with monocle - Modeling the part and the whole
Optics with monocle - Modeling the part and the wholeOptics with monocle - Modeling the part and the whole
Optics with monocle - Modeling the part and the wholeIlan Godik
 
Functors, in theory and in practice
Functors, in theory and in practiceFunctors, in theory and in practice
Functors, in theory and in practiceMartin Menestret
 
Monoids, monoids, monoids
Monoids, monoids, monoidsMonoids, monoids, monoids
Monoids, monoids, monoidsLuka Jacobowitz
 
Monads and friends demystified
Monads and friends demystifiedMonads and friends demystified
Monads and friends demystifiedAlessandro Lacava
 
Categories for the Working C++ Programmer
Categories for the Working C++ ProgrammerCategories for the Working C++ Programmer
Categories for the Working C++ ProgrammerPlatonov Sergey
 
Monoids, Monoids, Monoids - ScalaLove 2020
Monoids, Monoids, Monoids - ScalaLove 2020Monoids, Monoids, Monoids - ScalaLove 2020
Monoids, Monoids, Monoids - ScalaLove 2020Luka Jacobowitz
 
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
 
Mining Functional Patterns
Mining Functional PatternsMining Functional Patterns
Mining Functional PatternsDebasish Ghosh
 
Monad and Algebraic Design in Functional Programming
Monad and Algebraic Design in Functional ProgrammingMonad and Algebraic Design in Functional Programming
Monad and Algebraic Design in Functional ProgrammingNamuk Park
 
Functional programming with FSharp
Functional programming with FSharpFunctional programming with FSharp
Functional programming with FSharpDaniele Pozzobon
 

Similar to Category theory for beginners (20)

Scala categorytheory
Scala categorytheoryScala categorytheory
Scala categorytheory
 
Scala categorytheory
Scala categorytheoryScala categorytheory
Scala categorytheory
 
Power of functions in a typed world
Power of functions in a typed worldPower of functions in a typed world
Power of functions in a typed world
 
Algebraic Data Types and Origami Patterns
Algebraic Data Types and Origami PatternsAlgebraic Data Types and Origami Patterns
Algebraic Data Types and Origami Patterns
 
Monad Fact #4
Monad Fact #4Monad Fact #4
Monad Fact #4
 
Functor Laws
Functor LawsFunctor Laws
Functor Laws
 
The Essence of the Iterator Pattern
The Essence of the Iterator PatternThe Essence of the Iterator Pattern
The Essence of the Iterator Pattern
 
Oh, All the things you'll traverse
Oh, All the things you'll traverseOh, All the things you'll traverse
Oh, All the things you'll traverse
 
The Essence of the Iterator Pattern (pdf)
The Essence of the Iterator Pattern (pdf)The Essence of the Iterator Pattern (pdf)
The Essence of the Iterator Pattern (pdf)
 
Optics with monocle - Modeling the part and the whole
Optics with monocle - Modeling the part and the wholeOptics with monocle - Modeling the part and the whole
Optics with monocle - Modeling the part and the whole
 
Functors, in theory and in practice
Functors, in theory and in practiceFunctors, in theory and in practice
Functors, in theory and in practice
 
Monoids, monoids, monoids
Monoids, monoids, monoidsMonoids, monoids, monoids
Monoids, monoids, monoids
 
Monads and friends demystified
Monads and friends demystifiedMonads and friends demystified
Monads and friends demystified
 
Categories for the Working C++ Programmer
Categories for the Working C++ ProgrammerCategories for the Working C++ Programmer
Categories for the Working C++ Programmer
 
Scala best practices
Scala best practicesScala best practices
Scala best practices
 
Monoids, Monoids, Monoids - ScalaLove 2020
Monoids, Monoids, Monoids - ScalaLove 2020Monoids, Monoids, Monoids - ScalaLove 2020
Monoids, Monoids, Monoids - ScalaLove 2020
 
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!
 
Mining Functional Patterns
Mining Functional PatternsMining Functional Patterns
Mining Functional Patterns
 
Monad and Algebraic Design in Functional Programming
Monad and Algebraic Design in Functional ProgrammingMonad and Algebraic Design in Functional Programming
Monad and Algebraic Design in Functional Programming
 
Functional programming with FSharp
Functional programming with FSharpFunctional programming with FSharp
Functional programming with FSharp
 

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
 
The disaster of mutable state
The disaster of mutable stateThe disaster of mutable state
The disaster of mutable statekenbot
 

More from kenbot (9)

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
 
The disaster of mutable state
The disaster of mutable stateThe disaster of mutable state
The disaster of mutable state
 

Recently uploaded

Application of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptxApplication of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptx959SahilShah
 
complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...asadnawaz62
 
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEINFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEroselinkalist12
 
HARMONY IN THE NATURE AND EXISTENCE - Unit-IV
HARMONY IN THE NATURE AND EXISTENCE - Unit-IVHARMONY IN THE NATURE AND EXISTENCE - Unit-IV
HARMONY IN THE NATURE AND EXISTENCE - Unit-IVRajaP95
 
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort serviceGurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort servicejennyeacort
 
main PPT.pptx of girls hostel security using rfid
main PPT.pptx of girls hostel security using rfidmain PPT.pptx of girls hostel security using rfid
main PPT.pptx of girls hostel security using rfidNikhilNagaraju
 
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionSachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionDr.Costas Sachpazis
 
Artificial-Intelligence-in-Electronics (K).pptx
Artificial-Intelligence-in-Electronics (K).pptxArtificial-Intelligence-in-Electronics (K).pptx
Artificial-Intelligence-in-Electronics (K).pptxbritheesh05
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptSAURABHKUMAR892774
 
Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxKartikeyaDwivedi3
 
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfCCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfAsst.prof M.Gokilavani
 
Past, Present and Future of Generative AI
Past, Present and Future of Generative AIPast, Present and Future of Generative AI
Past, Present and Future of Generative AIabhishek36461
 
Electronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdfElectronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdfme23b1001
 
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)dollysharma2066
 
Churning of Butter, Factors affecting .
Churning of Butter, Factors affecting  .Churning of Butter, Factors affecting  .
Churning of Butter, Factors affecting .Satyam Kumar
 
Work Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvWork Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvLewisJB
 
Risk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfRisk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfROCENODodongVILLACER
 

Recently uploaded (20)

Application of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptxApplication of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptx
 
complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...
 
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEINFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
 
HARMONY IN THE NATURE AND EXISTENCE - Unit-IV
HARMONY IN THE NATURE AND EXISTENCE - Unit-IVHARMONY IN THE NATURE AND EXISTENCE - Unit-IV
HARMONY IN THE NATURE AND EXISTENCE - Unit-IV
 
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort serviceGurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
 
main PPT.pptx of girls hostel security using rfid
main PPT.pptx of girls hostel security using rfidmain PPT.pptx of girls hostel security using rfid
main PPT.pptx of girls hostel security using rfid
 
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionSachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
 
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptxExploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
 
Artificial-Intelligence-in-Electronics (K).pptx
Artificial-Intelligence-in-Electronics (K).pptxArtificial-Intelligence-in-Electronics (K).pptx
Artificial-Intelligence-in-Electronics (K).pptx
 
🔝9953056974🔝!!-YOUNG call girls in Rajendra Nagar Escort rvice Shot 2000 nigh...
🔝9953056974🔝!!-YOUNG call girls in Rajendra Nagar Escort rvice Shot 2000 nigh...🔝9953056974🔝!!-YOUNG call girls in Rajendra Nagar Escort rvice Shot 2000 nigh...
🔝9953056974🔝!!-YOUNG call girls in Rajendra Nagar Escort rvice Shot 2000 nigh...
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.ppt
 
Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptx
 
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfCCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
 
Past, Present and Future of Generative AI
Past, Present and Future of Generative AIPast, Present and Future of Generative AI
Past, Present and Future of Generative AI
 
Electronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdfElectronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdf
 
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
 
POWER SYSTEMS-1 Complete notes examples
POWER SYSTEMS-1 Complete notes  examplesPOWER SYSTEMS-1 Complete notes  examples
POWER SYSTEMS-1 Complete notes examples
 
Churning of Butter, Factors affecting .
Churning of Butter, Factors affecting  .Churning of Butter, Factors affecting  .
Churning of Butter, Factors affecting .
 
Work Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvWork Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvv
 
Risk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfRisk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdf
 

Category theory for beginners