samber/mo

🦄 Monads and popular FP abstractions, powered by Go 1.18+ Generics (Option, Result, Either...)

View on GitHub ↗Jump to charts ↓

Summary Information

Updated 7 minutes ago
Added to GitGenius on September 20th, 2026
Created on May 17th, 2022
Open Issues & Pull Requests: 18 (+0)
GitHub issues: Enabled
Number of forks: 120
Total Stargazers: 3,417 (+0)
Total Subscribers: 18 (+0)

Charts & Analytics

Fetching additional details & charts...

Issue Activity (beta)

Open issues: 7
New in 7 days: 0
Closed in 7 days: 0
Avg open age: 899 days
Stale 30+ days: 7
Stale 90+ days: 7

Recent activity

Opened in 7 days: 0
Closed in 7 days: 0
Comments in 7 days: 0
Events in 7 days: 0

Top labels

  • breaking-change (3)

Most active issues this week

No issue events were indexed in the last 7 days.

Detailed Description

mo is a functional programming library that brings monads and popular FP abstractions to Go projects using Go 1.18+ Generics.

The library solves the problem of handling optional values, error cases, and complex control flow in Go by providing type-safe abstractions inspired by languages like Scala and Rust. It offers containers like Option for optional values, Result for operations that may fail, Either for representing one of two possible values, and several async-oriented types like Future, Task, and IO. These abstractions allow developers to chain operations through composition rather than writing explicit nil checks or error handling boilerplate.

The tool suits Go projects where developers want to adopt functional programming patterns and need explicit handling of absence, failure, or choice. It works well for codebases that benefit from composable transformations and explicit type safety around edge cases. The library has no external dependencies beyond the Go standard library, making it lightweight to adopt. Developers should note that the library is at v1 and follows semantic versioning strictly, with a commitment to no breaking changes to exported APIs before v2.

The project maintains active development with regular updates and demonstrates responsiveness to issues and pull requests. The codebase shows consistent refinement of the API surface and expansion of supported abstractions. Documentation is comprehensive, with examples provided for each major type and operation.