Build a small interactive command-line task manager. Define domain types, use `Maybe` and `Either` for absence and failure, separate pure logic from `IO`, and handle validated user input.
Overview
Syllabus
- Unit 1: Naming Your Domain
- Naming the Parts of a Task
- Describing Tasks in Your Vocabulary
- Unit 2: Defining Custom Data Types
- Building Your First Custom Type
- Bundling Data into a Task
- Unit 3: Pattern Matching on Constructors
- Labeling Every Status Choice
- Unpacking Tasks into Readable Text
- Unit 4: Modeling Absence with Maybe
- Searching Tasks Without Crashing
- Reporting Results Without Crashing
- Unit 5: Reporting Errors with Either
- Reporting the Reason for Failure
- Routing Outcomes Through One Pipeline
- Unit 6: Building Interactive Programs
- Bringing Your Task Manager Alive
- Looping Until the Input Ends
- Unit 7: Building Complete Interactive Programs
- Threading State Through the Loop
- Listing Tasks with Recursive Joins
- Growing State with New Tasks