SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Just Enough Category Theory
for Haskell (part 1)
Heejong Ahn
(github.com/heejongahn)
Tabel of Contents
• Purpose and Focus
• Category
• Functor
Purpose and Focus
Purpose
• “Do I have to read this thick math book with stubborn, dull cover
thoroughly, just to write a program in Haskell?”
• You don’t.
• We’ve already gone through 5 weeks of exercises without any book!
• Yet, as Haskell borrowed a lot of its core concepts from category
theory, some knowledge on it might help you a lot.
Focus
• I’ll try to avoid analogues, which is often used to give an intuition.
• That’s because sometimes those keep you from getting actual, clear
idea about a concept.
• Instead, I’d rather stick to mathematical terms and laws.
Disclaimer
• I’ve never been excellent in math.
• Haven’t been really passionate about it, neither.
• Though I’ve put a huge amount of time, there will be lots of unclear,
even wrong spots throughout the slides.
• If you find any, please feel free to interrupt and correct me ☺
Category
Category
Category is just a collection which has:
• A collection of objects
• A collection of morphisms
• A notion of composition
X Y
Z
f
g
g ◦ f
Category
Category is just a collection which has:
• A collection of objects
• A collection of morphisms
• A notion of composition
X Y
Z
f
g
g ◦ f
Category
Category is just a collection which has:
• A collection of objects
• A collection of morphisms
• A notion of composition
X Y
Z
f
g
g ◦ f
source object X
target object Y
Category
Category is just a collection which has:
• A collection of objects
• A collection of morphisms
• A notion of composition
X Y
Z
f
g
g ◦ f
Category Example
• Category of sets(Set) is a category.
• Set has a collection of objects, which is, well, all sets.
• Set has a collection of morphisms, which is a collection of functions
from a set to another set.
• Set has a notion of composition, which is just a function composition.
Category Example (cont’d)
• Category of groups(Grp) is also a category.
• Grp has a collection of objects, which is, again, all groups.
• Grp has a collection of morphisms, which is a collection of functions
which preserves group operation (the group homomorphism)
• Grp has a notion of composition, which is just a function composition.
Category Laws
Categories must meet these requirements :
• Composition of mophisms should be associative
• For every object in a category, there must be an identity morphism
Hask
• Hask, the category of Haskell types and functions, is our main topic.
• Speaking of category, we’ve heard that every category must have…
• Objects, morphisms, and composition!
Hask (cont’d)
• Objects : Haskell types
• Morphisms : Haskell functions
• Composition : (.)
• We know haskell functions are associative, and we have id.
• On top of that, we define two functions f and g as the same
morphism if f x = g x for all x. (Why? Is it really needed?)
Functor
Functor
• “In mathematics, a functor is a type of mapping between categories
which is applied in category theory. Functors can be thought of as
homomorphisms between categories.” (Wikipedia)
• Sorry, what?
Functor (cont’d)
•
“In mathematics, a functor is a type of mapping between categories which is applied in category theory.
Functors can be thought of as homomorphisms between categories.”
• To map a category to another category, we have to map…
• Objects, Morphisms, and Composition!
• Composition is mostly trivial for this case, so we won’t focus on it.
Functor Laws
Functors must meet these requirements :
• Functor must map identity of an object to that of a mapped object
• Functor must distribute over morphism composition
Functor Example
• Diagram of a functor from
category C to category D.
• You can see:
• Object mapping (yellow)
• Morphism mapping (purple)
Functor in Hask
• What does Maybe do?
• It turns a Hask object(type), T, to another object, Maybe T.
Functor in Hask (cont’d)
• What does fmap do, when applied to a Maybe instance?
• It turns a Hask morphism(function), with type (A -> B),

to another morphism, with type (Maybe A -> Maybe B).
Functor in Hask (cont’d)
• So as we have
• Type constructor, which maps objects between categories
• fmap, which maps morphisms between categories
• Maybe is an instance of Functor - it maps Hask to its subcategory,
a category of Maybe types and functions defined on Maybe types.
Functor in Hask (cont’d)
• Same logic applies to any Functor types.
• Both Functor laws are fulfilled for any functor on Hask.
• fmap id = id
• fmap (f . g) = (fmap f) . (fmap g)
Summary
Summary
• We’ve talked about Hask, the category of Haskell types and functions.
• (types, functions, (.) ) corresponds to 

(objects, morphisms, composition), respectively.
• Functor typeclasses works as Functor in category theory, that is, a
mapping between two different categories.
• Next topics : Monoid, Applicative Functor, Monad, …
Appendix
References
• https://en.wikibooks.org/wiki/Haskell/Category_theory
• https://wiki.haskell.org/Hask
• https://en.wikipedia.org/wiki/Category_theory
• https://en.wikipedia.org/wiki/Category_(mathematics)
• https://en.wikipedia.org/wiki/Group_(mathematics)
• https://en.wikipedia.org/wiki/Group_homomorphism
• https://en.wikipedia.org/wiki/Category_of_sets
• https://en.wikipedia.org/wiki/Category_of_groups
• https://wiki.haskell.org/Typeclassopedia

Mais conteúdo relacionado

Mais procurados

OOP-Advanced Programming with c++
OOP-Advanced Programming with c++OOP-Advanced Programming with c++
OOP-Advanced Programming with c++
Mohamed Essam
 

Mais procurados (20)

OOP-Advanced Programming with c++
OOP-Advanced Programming with c++OOP-Advanced Programming with c++
OOP-Advanced Programming with c++
 
5. stored procedure and functions
5. stored procedure and functions5. stored procedure and functions
5. stored procedure and functions
 
Golang Channels
Golang ChannelsGolang Channels
Golang Channels
 
PL/SQL TRIGGERS
PL/SQL TRIGGERSPL/SQL TRIGGERS
PL/SQL TRIGGERS
 
JDBC
JDBCJDBC
JDBC
 
Implementing the IO Monad in Scala
Implementing the IO Monad in ScalaImplementing the IO Monad in Scala
Implementing the IO Monad in Scala
 
Counting sort(Non Comparison Sort)
Counting sort(Non Comparison Sort)Counting sort(Non Comparison Sort)
Counting sort(Non Comparison Sort)
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
Templates in c++
Templates in c++Templates in c++
Templates in c++
 
C# Method overloading
C# Method overloadingC# Method overloading
C# Method overloading
 
Collision resolution.pptx
Collision resolution.pptxCollision resolution.pptx
Collision resolution.pptx
 
Functional Core and Imperative Shell - Game of Life Example - Haskell and Scala
Functional Core and Imperative Shell - Game of Life Example - Haskell and ScalaFunctional Core and Imperative Shell - Game of Life Example - Haskell and Scala
Functional Core and Imperative Shell - Game of Life Example - Haskell and Scala
 
Bytebuf vs DirectByteBuffer
Bytebuf vs DirectByteBufferBytebuf vs DirectByteBuffer
Bytebuf vs DirectByteBuffer
 
Optimal binary search tree
Optimal binary search treeOptimal binary search tree
Optimal binary search tree
 
Purely Functional Data Structures in Scala
Purely Functional Data Structures in ScalaPurely Functional Data Structures in Scala
Purely Functional Data Structures in Scala
 
CS8391 Data Structures Part B Questions Anna University
CS8391 Data Structures Part B Questions Anna UniversityCS8391 Data Structures Part B Questions Anna University
CS8391 Data Structures Part B Questions Anna University
 
Exception handling in plsql
Exception handling in plsqlException handling in plsql
Exception handling in plsql
 
Functional Programming by Examples using Haskell
Functional Programming by Examples using HaskellFunctional Programming by Examples using Haskell
Functional Programming by Examples using Haskell
 
SQL Joins and Query Optimization
SQL Joins and Query OptimizationSQL Joins and Query Optimization
SQL Joins and Query Optimization
 
OOP with Java - Continued
OOP with Java - Continued OOP with Java - Continued
OOP with Java - Continued
 

Semelhante a Just Enough Category Theory for Haskell, part 1

Semelhante a Just Enough Category Theory for Haskell, part 1 (20)

Object Oriented Programming.pptx
Object Oriented Programming.pptxObject Oriented Programming.pptx
Object Oriented Programming.pptx
 
Java interfaces
Java interfacesJava interfaces
Java interfaces
 
[OOP - Lec 04,05] Basic Building Blocks of OOP
[OOP - Lec 04,05] Basic Building Blocks of OOP[OOP - Lec 04,05] Basic Building Blocks of OOP
[OOP - Lec 04,05] Basic Building Blocks of OOP
 
Javasession7
Javasession7Javasession7
Javasession7
 
Lecture 1 - Objects and classes
Lecture 1 - Objects and classesLecture 1 - Objects and classes
Lecture 1 - Objects and classes
 
OOP in JS
OOP in JSOOP in JS
OOP in JS
 
Enumerables
EnumerablesEnumerables
Enumerables
 
Taxonomy: Do I Need One
Taxonomy: Do I Need OneTaxonomy: Do I Need One
Taxonomy: Do I Need One
 
Taxonomy
TaxonomyTaxonomy
Taxonomy
 
UML-class_diagram.ppt
UML-class_diagram.pptUML-class_diagram.ppt
UML-class_diagram.ppt
 
UML-class diagram for beginners to adance.ppt
UML-class diagram for beginners to adance.pptUML-class diagram for beginners to adance.ppt
UML-class diagram for beginners to adance.ppt
 
Java Hands-On Workshop
Java Hands-On WorkshopJava Hands-On Workshop
Java Hands-On Workshop
 
Tutorial spyout
Tutorial spyoutTutorial spyout
Tutorial spyout
 
Code Like Pythonista
Code Like PythonistaCode Like Pythonista
Code Like Pythonista
 
C++ Introduction brown bag
C++ Introduction brown bagC++ Introduction brown bag
C++ Introduction brown bag
 
Java Lecture5.pptx
Java Lecture5.pptxJava Lecture5.pptx
Java Lecture5.pptx
 
Object Oriented Programming Tutorial.pptx
Object Oriented Programming Tutorial.pptxObject Oriented Programming Tutorial.pptx
Object Oriented Programming Tutorial.pptx
 
mahout-cf
mahout-cfmahout-cf
mahout-cf
 
Chapter 5 searching and sorting handouts with notes
Chapter 5   searching and sorting handouts with notesChapter 5   searching and sorting handouts with notes
Chapter 5 searching and sorting handouts with notes
 
Chemical features: how do we describe a compound to a computer?
Chemical features: how do we describe a compound to a computer?Chemical features: how do we describe a compound to a computer?
Chemical features: how do we describe a compound to a computer?
 

Mais de Heejong Ahn (7)

플렉스팀 프론트엔드 기술 스택의 이해: `lint`, `build`, `run`
플렉스팀 프론트엔드 기술 스택의 이해: `lint`, `build`, `run`플렉스팀 프론트엔드 기술 스택의 이해: `lint`, `build`, `run`
플렉스팀 프론트엔드 기술 스택의 이해: `lint`, `build`, `run`
 
프로그래머의 배움
프로그래머의 배움프로그래머의 배움
프로그래머의 배움
 
Being a Multiplier
Being a MultiplierBeing a Multiplier
Being a Multiplier
 
Hello, React Hooks!
Hello, React Hooks!Hello, React Hooks!
Hello, React Hooks!
 
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
 
Pure UI
Pure UIPure UI
Pure UI
 
더 나은 팀을 위하여
더 나은 팀을 위하여더 나은 팀을 위하여
더 나은 팀을 위하여
 

Último

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
[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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
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
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
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
 
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
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 

Just Enough Category Theory for Haskell, part 1

  • 1. Just Enough Category Theory for Haskell (part 1) Heejong Ahn (github.com/heejongahn)
  • 2. Tabel of Contents • Purpose and Focus • Category • Functor
  • 4. Purpose • “Do I have to read this thick math book with stubborn, dull cover thoroughly, just to write a program in Haskell?” • You don’t. • We’ve already gone through 5 weeks of exercises without any book! • Yet, as Haskell borrowed a lot of its core concepts from category theory, some knowledge on it might help you a lot.
  • 5. Focus • I’ll try to avoid analogues, which is often used to give an intuition. • That’s because sometimes those keep you from getting actual, clear idea about a concept. • Instead, I’d rather stick to mathematical terms and laws.
  • 6. Disclaimer • I’ve never been excellent in math. • Haven’t been really passionate about it, neither. • Though I’ve put a huge amount of time, there will be lots of unclear, even wrong spots throughout the slides. • If you find any, please feel free to interrupt and correct me ☺
  • 8. Category Category is just a collection which has: • A collection of objects • A collection of morphisms • A notion of composition X Y Z f g g ◦ f
  • 9. Category Category is just a collection which has: • A collection of objects • A collection of morphisms • A notion of composition X Y Z f g g ◦ f
  • 10. Category Category is just a collection which has: • A collection of objects • A collection of morphisms • A notion of composition X Y Z f g g ◦ f source object X target object Y
  • 11. Category Category is just a collection which has: • A collection of objects • A collection of morphisms • A notion of composition X Y Z f g g ◦ f
  • 12. Category Example • Category of sets(Set) is a category. • Set has a collection of objects, which is, well, all sets. • Set has a collection of morphisms, which is a collection of functions from a set to another set. • Set has a notion of composition, which is just a function composition.
  • 13. Category Example (cont’d) • Category of groups(Grp) is also a category. • Grp has a collection of objects, which is, again, all groups. • Grp has a collection of morphisms, which is a collection of functions which preserves group operation (the group homomorphism) • Grp has a notion of composition, which is just a function composition.
  • 14. Category Laws Categories must meet these requirements : • Composition of mophisms should be associative • For every object in a category, there must be an identity morphism
  • 15. Hask • Hask, the category of Haskell types and functions, is our main topic. • Speaking of category, we’ve heard that every category must have… • Objects, morphisms, and composition!
  • 16. Hask (cont’d) • Objects : Haskell types • Morphisms : Haskell functions • Composition : (.) • We know haskell functions are associative, and we have id. • On top of that, we define two functions f and g as the same morphism if f x = g x for all x. (Why? Is it really needed?)
  • 18. Functor • “In mathematics, a functor is a type of mapping between categories which is applied in category theory. Functors can be thought of as homomorphisms between categories.” (Wikipedia) • Sorry, what?
  • 19. Functor (cont’d) • “In mathematics, a functor is a type of mapping between categories which is applied in category theory. Functors can be thought of as homomorphisms between categories.” • To map a category to another category, we have to map… • Objects, Morphisms, and Composition! • Composition is mostly trivial for this case, so we won’t focus on it.
  • 20. Functor Laws Functors must meet these requirements : • Functor must map identity of an object to that of a mapped object • Functor must distribute over morphism composition
  • 21. Functor Example • Diagram of a functor from category C to category D. • You can see: • Object mapping (yellow) • Morphism mapping (purple)
  • 22. Functor in Hask • What does Maybe do? • It turns a Hask object(type), T, to another object, Maybe T.
  • 23. Functor in Hask (cont’d) • What does fmap do, when applied to a Maybe instance? • It turns a Hask morphism(function), with type (A -> B),
 to another morphism, with type (Maybe A -> Maybe B).
  • 24. Functor in Hask (cont’d) • So as we have • Type constructor, which maps objects between categories • fmap, which maps morphisms between categories • Maybe is an instance of Functor - it maps Hask to its subcategory, a category of Maybe types and functions defined on Maybe types.
  • 25. Functor in Hask (cont’d) • Same logic applies to any Functor types. • Both Functor laws are fulfilled for any functor on Hask. • fmap id = id • fmap (f . g) = (fmap f) . (fmap g)
  • 27. Summary • We’ve talked about Hask, the category of Haskell types and functions. • (types, functions, (.) ) corresponds to 
 (objects, morphisms, composition), respectively. • Functor typeclasses works as Functor in category theory, that is, a mapping between two different categories. • Next topics : Monoid, Applicative Functor, Monad, …
  • 29. References • https://en.wikibooks.org/wiki/Haskell/Category_theory • https://wiki.haskell.org/Hask • https://en.wikipedia.org/wiki/Category_theory • https://en.wikipedia.org/wiki/Category_(mathematics) • https://en.wikipedia.org/wiki/Group_(mathematics) • https://en.wikipedia.org/wiki/Group_homomorphism • https://en.wikipedia.org/wiki/Category_of_sets • https://en.wikipedia.org/wiki/Category_of_groups • https://wiki.haskell.org/Typeclassopedia