I didn't find any existing implementations I found to be
satisfactory. They either lacked the strong typing guarantees I wanted, or
they were incomplete and unmaintained, or I simply didn't like their
stylistic preferences. For some reason or another I wasn't happy with any
of the other implementations I tried.
It's fun. Type-safe Option and Result are really rewarding types to
implement. If you haven't tried building them yourself, I strongly
recommend it.
I opted to implement the Rust versions of these types and not the
Haskell/Purescript versions for a few reasons:
There are no type classes in Typescript, so approximated Maybe and
Either implementations would have way more differences from their source
versions than Option and Result instances.
I love Haskell and Purescript (and other ML family languages) personally,
but I also believe those to be far less approachable languages than
Rust. I think the Rust versions are easier to understand and teach and the
terminology is easier to grok for newcomers, at the expense of some degree
of generic code. I use this library practically myself and while I value
type safety, I also value approachability from developers other than
myself, and I believe the Rust versions strike a better balance there than
the Haskell/Purescript ones do.
Purescript compiles to Javascript; as such I don't believe there's much
value in cloning types from that language when you could just as easily
write parts of your application in Purescript directly instead and not
have to deal with the shortcomings of using those types in a language not
designed for them.
This package contains yet another Typescript clone of the rust
Option
&Result
enums.Installing
Use the package manager of your choice to install:
npm install --save-dev @cprussin/option-result
pnpm add -D @cprussin/option-result
yarn add -D @cprussin/option-result
Usage
This library mostly implements an as-close-to-identical API to the Rust types as possible.
Example
FAQ
Motivation
Two main reasons:
Option
andResult
are really rewarding types to implement. If you haven't tried building them yourself, I strongly recommend it.Why use Rust's
Option
andResult
instead of Haskell'sMaybe
andEither
?I opted to implement the Rust versions of these types and not the Haskell/Purescript versions for a few reasons:
Maybe
andEither
implementations would have way more differences from their source versions thanOption
andResult
instances.