SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
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

Más contenido relacionado

Similar a Just Enough Category Theory for Haskell, part 1

Object Oriented Programming.pptx
Object Oriented Programming.pptxObject Oriented Programming.pptx
Object Oriented Programming.pptxSAICHARANREDDYN
 
[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 OOPMuhammad Hammad Waseem
 
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.pptWorkDrive2
 
Java Hands-On Workshop
Java Hands-On WorkshopJava Hands-On Workshop
Java Hands-On WorkshopArpit Poladia
 
Tutorial spyout
Tutorial spyoutTutorial spyout
Tutorial spyoutpyhasse
 
Code Like Pythonista
Code Like PythonistaCode Like Pythonista
Code Like PythonistaChiyoung Song
 
C++ Introduction brown bag
C++ Introduction brown bagC++ Introduction brown bag
C++ Introduction brown bagJacob Green
 
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 notesmailund
 
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?Richard Lewis
 

Similar 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
TaxonomyTaxonomy
Taxonomy
 
Taxonomy: Do I Need One
Taxonomy: Do I Need OneTaxonomy: Do I Need One
Taxonomy: Do I Need One
 
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
 
UML-class_diagram.ppt
UML-class_diagram.pptUML-class_diagram.ppt
UML-class_diagram.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
 
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?
 
Java
JavaJava
Java
 

Más de Heejong Ahn

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

Más 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

A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 

Último (20)

A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 

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