Skip to content

Rust-aligned Option, Result, and Either monads for type-safe error handling in PHP

License

Notifications You must be signed in to change notification settings

faustbrian/monad

Repository files navigation

GitHub Workflow Status (master) Total Downloads Latest Version License


This package provides a Rust-aligned Option, Result, and Either types providing expressive, type-safe error handling and ergonomic controller helpers for Laravel applications.

Requirements

Requires PHP 8.4+

Installation

composer require cline/monad

Documentation

  • Option Guide - Complete guide with real-world examples for null-safe operations
  • Result Guide - Comprehensive error handling patterns with Ok/Err semantics
  • Either Guide - Advanced Left/Right branching for complex scenarios
  • Transpose Guide - Swapping nested monads (Option ↔ Result)

Highlights

  • Option: Null-safety with fromNullable(), Laravel firstOption() macros, controller unwrapOrAbort() helpers
  • Result: Ok/Err semantics with full combinators and interop with Option
  • Either: Left/Right branching for complex multi-path scenarios
  • Full Rust-aligned API naming for unwrapping and chaining operations

Quick Reference

Option API

Create: fromNullable() fromValue() ensure() fromReturn() | Query: isSome() isNone() contains() | Unwrap: unwrap() unwrapOr() unwrapOrAbort() | Transform: map() andThen() filter() | Match: match(someFn, noneFn)

Result API

Create: Ok($v) Err($e) | Query: isOk() isErr() ok() err() | Unwrap: unwrap() unwrapOr() expect() | Transform: map() mapErr() andThen() | Match: match(okFn, errFn)

Either API

Create: left($v) right($v) | Query: isLeft() isRight() left() right() | Unwrap: unwrapLeft() unwrapRight() | Transform: mapLeft() mapRight() bimap() | Match: match(leftFn, rightFn)

See individual cookbook guides for comprehensive API documentation.

Development

Keep a modern codebase with PHP CS Fixer:

composer lint

Run refactors using Rector

composer refactor

Run static analysis using PHPStan:

composer test:types

Run unit tests using PEST

composer test:unit

Run the entire test suite:

composer test

Credits

Monad was created by Brian Faust under the MIT license.

About

Rust-aligned Option, Result, and Either monads for type-safe error handling in PHP

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages