An educational pure functional programming library in TypeScript
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fix table formatting in guides

+38 -38
+29 -29
docs/guides/README.md
··· 26 26 **Duration:** ~2-3 hours total 27 27 **Prerequisites:** Basic TypeScript knowledge 28 28 29 - | Chapter | Topic | What You'll Learn | 30 - |---------|-------|-------------------| 31 - | 1 | Why Functional TypeScript? | The problem with exceptions, errors as values | 32 - | 2 | Your First Effect | Creating, running, and transforming effects | 33 - | 3 | Typed Errors with Result | Ok/Err pattern, error composition | 34 - | 4 | Optional Values with Option | Some/None, avoiding null checks | 35 - | 5 | Pattern Matching | Exhaustive matching, type narrowing | 36 - | 6 | Branded Types | Distinct types from primitives | 37 - | 7 | The Effect System | Eff type, lazy evaluation, composition | 38 - | 8 | Concurrency with Fibers | Fork, join, race, cancellation | 39 - | 9 | Dependency Injection | Environments, provide, access | 40 - | 10 | Building a Complete App | Putting it all together | 29 + | Chapter | Topic | What You'll Learn | 30 + |---------|-----------------------------|-----------------------------------------------| 31 + | 1 | Why Functional TypeScript? | The problem with exceptions, errors as values | 32 + | 2 | Your First Effect | Creating, running, and transforming effects | 33 + | 3 | Typed Errors with Result | Ok/Err pattern, error composition | 34 + | 4 | Optional Values with Option | Some/None, avoiding null checks | 35 + | 5 | Pattern Matching | Exhaustive matching, type narrowing | 36 + | 6 | Branded Types | Distinct types from primitives | 37 + | 7 | The Effect System | Eff type, lazy evaluation, composition | 38 + | 8 | Concurrency with Fibers | Fork, join, race, cancellation | 39 + | 9 | Dependency Injection | Environments, provide, access | 40 + | 10 | Building a Complete App | Putting it all together | 41 41 42 42 --- 43 43 ··· 45 45 46 46 Deep-dives into specific topics when you need more detail. 47 47 48 - | Article | Description | 49 - |---------|-------------| 50 - | [Why Errors as Values?](./concepts/errors-as-values.md) | The exception problem, railway oriented programming | 51 - | [Branded Types In Depth](./concepts/branded-types.md) | Phantom types, smart constructors, production patterns | 52 - | Typestate Pattern | State machines in the type system | 53 - | Effect Composition | Building complex effects from simple ones | 54 - | Fiber Internals | How the runtime works under the hood | 55 - | Dependency Injection Patterns | Testing, layered environments | 56 - | Testing Strategies | Unit testing effectful code | 48 + | Article | Description | 49 + |---------------------------------------------------------|--------------------------------------------------------| 50 + | [Why Errors as Values?](./concepts/errors-as-values.md) | The exception problem, railway oriented programming | 51 + | [Branded Types In Depth](./concepts/branded-types.md) | Phantom types, smart constructors, production patterns | 52 + | Typestate Pattern | State machines in the type system | 53 + | Effect Composition | Building complex effects from simple ones | 54 + | Fiber Internals | How the runtime works under the hood | 55 + | Dependency Injection Patterns | Testing, layered environments | 56 + | Testing Strategies | Unit testing effectful code | 57 57 58 58 --- 59 59 ··· 61 61 62 62 ### When to Use What 63 63 64 - | Problem | Solution | 65 - |---------|----------| 66 - | "This function can fail" | `Result<T, E>` | 67 - | "This value might not exist" | `Option<T>` | 68 - | "I need to do async work" | `Eff<A, E, R>` | 69 - | "I don't want to mix up IDs" | `Branded<T, B>` | 70 - | "I need to inject dependencies" | `provide()` / `access()` | 71 - | "I need timeout/retry/cancellation" | Effect combinators | 64 + | Problem | Solution | 65 + |-------------------------------------|--------------------------| 66 + | "This function can fail" | `Result<T, E>` | 67 + | "This value might not exist" | `Option<T>` | 68 + | "I need to do async work" | `Eff<A, E, R>` | 69 + | "I don't want to mix up IDs" | `Branded<T, B>` | 70 + | "I need to inject dependencies" | `provide()` / `access()` | 71 + | "I need timeout/retry/cancellation" | Effect combinators | 72 72 73 73 ### Import Patterns 74 74
+9 -9
docs/guides/concepts/README.md
··· 115 115 116 116 ## Quick Concept Reference 117 117 118 - | Concept | One-Liner | 119 - |---------|-----------| 120 - | Result | Errors as values, not exceptions | 121 - | Option | Nullable values without null | 122 - | Branded Types | Distinct types from primitives | 123 - | Typestate | State machines in the type system | 124 - | Effect | Lazy, composable, typed async | 125 - | Fiber | Lightweight thread with cancellation | 126 - | Environment | Dependencies as a type parameter | 118 + | Concept | One-Liner | 119 + |---------------|--------------------------------------| 120 + | Result | Errors as values, not exceptions | 121 + | Option | Nullable values without null | 122 + | Branded Types | Distinct types from primitives | 123 + | Typestate | State machines in the type system | 124 + | Effect | Lazy, composable, typed async | 125 + | Fiber | Lightweight thread with cancellation | 126 + | Environment | Dependencies as a type parameter | 127 127 128 128 --- 129 129