A multiplatform Result monad for modelling success or failure operations.
Go to file
Michael Bull e455be2cc8 Make lambda return type of expect{Err} return Any
When constructing the exception message the toString method will be
implicitly called on the result of the lambda.

Takes inspiration from Kotlin's require function [1].

[1]: https://github.com/JetBrains/kotlin/blob/v1.2.0/libraries/stdlib/src/kotlin/util/Preconditions.kt#L26
2017-11-28 18:23:36 +00:00
gradle/wrapper Move to new package name 2017-10-22 00:59:16 +01:00
src Make lambda return type of expect{Err} return Any 2017-11-28 18:23:36 +00:00
.editorconfig Initial commit 2017-10-21 03:51:30 +01:00
.gitignore Add Travis CI configuration file 2017-10-22 01:06:11 +01:00
.travis.yml Add Travis CI configuration file 2017-10-22 01:06:11 +01:00
build.gradle Move to new package name 2017-10-22 00:59:16 +01:00
gradle.properties Update kotlin to 1.2.0 2017-11-28 18:07:24 +00:00
gradlew Initial commit 2017-10-21 03:51:30 +01:00
gradlew.bat Initial commit 2017-10-21 03:51:30 +01:00
LICENSE Initial commit 2017-10-21 03:51:30 +01:00
README.md Update version in README 2017-11-25 16:32:35 +00:00
settings.gradle Initial commit 2017-10-21 03:51:30 +01:00

kotlin-result

Release Build Status License

Result<V, E> is a monad for modelling success (Ok) or failure (Err) operations.

Inspiration

Inspiration for this library has been drawn from other languages in which the Result monad is present, including:

It also iterates on other Result libraries written in Kotlin, namely:

Improvements on the existing solutions include:

  • Feature parity with Result types from other languages including Elm, Haskell, & Rust
  • Lax constraints on value/error nullability
  • Lax constraints on the error type's inheritance (does not inherit from Exception)
  • Top level Ok and Err classes avoids qualifying usages with Result.Ok/Result.Err respectively
  • Higher-order functions marked with the inline keyword for reduced runtime overhead
  • Extension functions on Iterable & List for folding, combining, partitioning
  • Consistent naming with existing Result libraries from other languages (e.g. map, mapError, mapBoth, mapEither, and, andThen, or, orElse, unwrap)
  • Extensive test suite with over 50 unit tests covering every library method

Installation

repositories {
    maven { url "https://jitpack.io" }
}

dependencies {
    compile 'com.github.michaelbull:kotlin-result:1.0.1'
}

Getting Started

The unit tests are a good source of examples for using the library as they cover every available method.

Mappings from common Result libraries are available on the wiki:

Contributing

Bug reports and pull requests are welcome on GitHub.

License

This project is available under the terms of the ISC license. See the LICENSE file for the copyright information and licensing terms.