
For some time now I’ve been oating the idea of writing a book about category theory that would be targeted at programmers. Mind you, not computer scientists but pro- grammers — engineers rather than scientists. I know this sounds crazy and I am properly scared. I can’t deny that there is a huge gap between science and engineering be- cause I have worked on both sides of the divide. But I’ve al- ways felt a very strong compulsion to explain things. I have tremendous admiration for Richard Feynman who was the master of simple explanations. I know I’m no Feynman, but I will try my best. I’m starting by publishing this pref- ace — which is supposed to motivate the reader to learn category theory — in hopes of starting a discussion and soliciting feedback.
This is an unofficial PDF version of "Category Theory for Programmers" by Bartosz Milewski, converted from his blogpost series.
- Preface
- I Part One
- Category: The Essence of Composition
- Arrows as Functions
- Properties of Composition
- Composition is the Essence of Programming
- Challenges
- Types and Functions
- Who Needs Types?
- Types Are About Composability
- What Are Types?
- Why Do We Need a Mathematical Model?
- Pure and Dirty Functions
- Examples of Types
- Challenges
- Categories Great and Small
- No Objects
- Simple Graphs
- Orders
- Monoid as Set
- Monoid as Category
- Challenges
- Kleisli Categories
- The Writer Category
- Writer in Haskell
- Kleisli Categories
- Challenge
- Products and Coproducts
- Initial Object
- Terminal Object
- Duality
- Isomorphisms
- Products
- Coproduct
- Asymmetry
- Challenges
- Bibliography
- Simple Algebraic Data Types
- Product Types
- Records
- Sum Types
- Algebra of Types
- Challenges
- Functors
- Functors in Programming
- The Maybe Functor
- Equational Reasoning
- Optional
- Typeclasses
- Functor in C++
- The List Functor
- The Reader Functor
- Functors as Containers
- Functor Composition
- Challenges
- Functors in Programming
- Functoriality
- Bifunctors
- Product and Coproduct Bifunctors
- Functorial Algebraic Data Types
- Functors in C++
- The Writer Functor
- Covariant and Contravariant Functors
- Profunctors
- Challenges
- Function Types
- Universal Construction
- Currying
- Exponentials
- Cartesian Closed Categories
- Exponentials and Algebraic Data Types
- Zeroth Power
- Powers of One
- First Power
- Exponentials of Sums
- Exponentials of Exponentials
- Exponentials over Products
- Curry-Howard Isomorphism
- Bibliography
- Natural Transformations
- Polymorphic Functions
- Beyond Naturality
- Functor Category
- 2-Categories
- Conclusion
- Challenges
- Category: The Essence of Composition
- II Part Two
- Declarative Programming
- Limits and Colimits
- Limit as a Natural Isomorphism
- Examples of Limits
- Colimits
- Continuity
- Challenges
- Free Monoids
- Free Monoid in Haskell
- Free Monoid Universal Construction
- Challenges
- Representable Functors
- The Hom Functor
- Representable Functors
- Challenges
- Bibliography
- The Yoneda Lemma
- Yoneda in Haskell
- Co-Yoneda
- Challenges
- Bibliography
- Yoneda Embedding
- The Embedding
- Application to Haskell
- Preorder Example
- Naturality
- Challenges
- III Part Three
- It's All About Morphisms
- Functors
- Commuting Diagrams
- Natural Transformations
- Natural Isomorphisms
- Hom-Sets
- Hom-Set Isomorphisms
- Asymmetry of Hom-Sets
- Challenges
- Adjunctions
- Adjunction and Unit/Counit Pair
- Adjunctions and Hom-Sets
- Product from Adjunction
- Exponential from Adjunction
- Challenges
- Free/Forgetful Adjunctions
- Some Intuitions
- Challenges
- Monads: Programmer's Definition
- The Kleisli Category
- Fish Anatomy
- The do Notation
- Monads and Effects
- The Problem
- The Solution
- Partiality
- Nondeterminism
- Read-Only State
- Write-Only State
- State
- Exceptions
- Continuations
- Interactive Input
- Interactive Output
- Conclusion
- Monads Categorically
- Monoidal Categories
- Monoid in a Monoidal Category
- Monads as Monoids
- Monads from Adjunctions
- Comonads
- Programming with Comonads
- The Product Comonad
- Dissecting the Composition
- The Stream Comonad
- Comonad Categorically
- The Store Comonad
- Challenges
- F-Algebras
- Recursion
- Category of F-Algebras
- Natural Numbers
- Catamorphisms
- Folds
- Coalgebras
- Challenges
- Algebras for Monads
- T-algebras
- The Kleisli Category
- Coalgebras for Comonads
- Lenses
- Challenges
- Ends and Coends
- Dinatural Transformations
- Ends
- Ends as Equalizers
- Natural Transformations as Ends
- Coends
- Ninja Yoneda Lemma
- Profunctor Composition
- Kan Extensions
- Right Kan Extension
- Kan Extension as Adjunction
- Left Kan Extension
- Kan Extensions as Ends
- Kan Extensions in Haskell
- Free Functor
- Enriched Categories
- Why Monoidal Category?
- Monoidal Category
- Enriched Category
- Preorders
- Metric Spaces
- Enriched Functors
- Self Enrichment
- Relation to 2-Categories
- Topoi
- Subobject Classifier
- Topos
- Topoi and Logic
- Challenges
- Lawvere Theories
- Universal Algebra
- Lavwere Theories
- Models of Lawvere Theories
- The Theory of Monoids
- Lawvere Theories and Monads
- Monads as Coends
- Lawvere Theory of Side Effects
- Challenges
- Further Reading
- Monads, Monoids, and Categories
- Bicategories
- Monads
- Challenges
- Bibliography
- Acknowledgments
- Index
- Colophon
- Copyleft notice
- It's All About Morphisms
Free Machine Learning Books
11 Books
- Pattern Recognition and Machine Learning (Information Science and Statistics)
- by Christopher M. Bishop
- Data mining
- by I. H. Witten
- The Elements of Statistical Learning: Data Mining, Inference, and Prediction
- by Various
Free Chemistry Textbooks
8 Books
- CK-12 Chemistry
- by Various
- Chemistry Grade 10 [CAPS]
- by Free High School Science Texts Project
- General Chemistry II
- by John Hutchinson
Free Mathematics Textbooks
21 Books
- Microsoft Word - How to Use Advanced Algebra II.doc
- by Jonathan Emmons
- Advanced Algebra II: Activities and Homework
- by Kenny Felder
- de2de
- by
Free Children Books
38 Books
- The Sun Who Lost His Way
- by
- Tania is a Detective
- by Kanika G
- Firenze_s-Light
- by
Free Java Books
10 Books
- Java 3D Programming
- by Daniel Selman
- The Java EE 6 Tutorial
- by Oracle Corporation
- JavaKid811
- by
- Jamaica Primary Social Studies 2nd Edition Student's Book 4
- by Eulie Mantock, Trineta Fendall, Clare Eastland
- Reggae Readers Student's Book 1
- by Louis Fidge
- Reggae Readers Student's Book 2
- by Louis Fidge