Functional Composition Beyond Monads
summary
Shows how to map functor/applicative/monad patterns onto C++: wraps callables with a small macro to build pipelines, implements fmap for optionals/ranges/senders, implements bind (join/let_value) to avoid double-boxing, and provides a generic sequence via traverse that flips vector<Sender> to Sender<vector> but runs serially when derived from monadic bind. Explains that applicatives permit concurrency while monads force sequencing, that std::map cannot be applicative, and demos lenses for targeted updates and reads via lenses that work as expected.
AI-written summary · about
chapters (42)
- 0:00Functional composition intro
- 0:43Basic function composition
- 1:26Composition operators & pipelines
- 3:33Problem with boxed values
- 4:15Exploring different kinds of boxes
- 7:23Functors and fmap
- 10:55fmap in pipelines
- 11:15Composing boxed functions
- 13:00Applicatives for boxes
- 16:31Applicative zero & variadic
- 17:12Functors vs applicatives
- 18:58Alternatives for choosing
- 20:00Alternatives implementation
- 22:50All functors alternatives?
- 24:05Applicatives vs alternatives
- 24:49Monads and bind
- 27:16Monads in decisions
- 29:43Monad is applicative
- 31:49Applicatives vs monads concurrency
- 33:11Recap functors applicatives alternatives monads
- 33:55Q&A senders applicatives
- 34:58Contravariant functors
- 37:44Contravariant practice
- 39:30Contravariant fmap & predicates
- 41:36Contravariant applicatives divisible
- 44:31Documentation challenges in functional programming
- 45:56Contravariant alternatives decidable
- 48:46Contravariant monads comonads
- 50:32Foldables monoids
- 53:49Foldable examples limits
- 54:52Foldables vs functors
- 55:13Applicatives alternatives monoids
- 55:59Validating boxed values
- 59:07Sequence traversable boxes
- 1:00:54Traverse applications
- 1:03:45Q&A optional vectors sequence
- 1:04:47Lenses & traversals
- 1:07:58Generic function transforms
- 1:09:23Lenses vs traversals view
- 1:12:30Why composition patterns matter
- 1:13:34Summary type class relations
- 1:13:55Q&A unwrapping identity traversals
related talks
58mMonoids, Monads, and Applicative Functors: Repeated Software Patterns
29m“Functional programming: functors and monads"
35mThe Functor, Applicative, Monad talk
01h 03mMonads in Modern C++
43mFunctional Programming with Effects
01h 31mFunctional Programming in Modern C++: The Imperatives Must Go!
01h 06mThe Functional Programmer's Toolkit
01h 18mSafe and Readable C++ Code: Monadic Operations in C++23
