Package Exports
- @unsplash/sum-types
- @unsplash/sum-types/dist/cjs/index.js
- @unsplash/sum-types/dist/esm/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@unsplash/sum-types) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
@unsplash/sum-types
Safe, ergonomic, non-generic sum types in TypeScript.
Documentation: unsplash.github.io/sum-types
[!NOTE] @unsplash/sum-types is no longer actively maintained as we've migrated to the Effect ecosystem.
import * as Sum from "@unsplash/sum-types"
type Weather = Sum.Member<"Sun"> | Sum.Member<"Rain", number>
const Weather = Sum.create<Weather>()
const getRainfall = Weather.match({
Rain: n => `${n}mm`,
Sun: () => "none",
})
const todayWeather = Weather.mk.Rain(5)
getRainfall(todayWeather) // '5mm'
Installation
The library is available on the npm registry: @unsplash/sum-types
Note that due to usage of Proxy
and Symbol
this library only supports ES2015+.
The following bindings are also available:
Motivation
The library solves a number of problems we've experienced at Unsplash with alternative libraries in this space. Specifically:
- Convenient member constructor functions are provided, unlike ts-adt.
- The API is small, simple, and boilerplate-free, unlike tagged-ts.
- Pattern matching is curried for use in pipeline application and function composition, unlike @practical-fp/union-types.
- Types are not inlined in compiler output, improving readability and performance at scale, unlike unionize.
The compromise we've made to achieve this is to not support generic sum types.