README.org: reformat and adjust headers

This commit is contained in:
Paul Campbell 2018-07-16 19:07:19 +01:00
parent c7c7c6ebeb
commit 3e4629d873

View file

@ -1,7 +1,4 @@
* Mon * Mon
:PROPERTIES:
:CUSTOM_ID: mon
:END:
** TypeAlias, Maybe and Result for Java. ** TypeAlias, Maybe and Result for Java.
@ -23,10 +20,8 @@
[[https://app.codacy.com/project/kemitix/mon/dashboard][file:https://img.shields.io/codacy/grade/d57096b0639d496aba9a7e43e7cf5b4c.svg?style=for-the-badge]] [[https://app.codacy.com/project/kemitix/mon/dashboard][file:https://img.shields.io/codacy/grade/d57096b0639d496aba9a7e43e7cf5b4c.svg?style=for-the-badge]]
[[http://i.jpeek.org/net.kemitix/mon/index.html][file:http://i.jpeek.org/net.kemitix/mon/badge.svg]] [[http://i.jpeek.org/net.kemitix/mon/index.html][file:http://i.jpeek.org/net.kemitix/mon/badge.svg]]
** Maven ** Maven
:PROPERTIES:
:CUSTOM_ID: maven
:END:
#+BEGIN_SRC xml #+BEGIN_SRC xml
<dependency> <dependency>
@ -41,9 +36,6 @@
** TypeAlias ** TypeAlias
:PROPERTIES:
:CUSTOM_ID: typealias
:END:
In Haskell it is possible to create an alias for a Type, and to then use In Haskell it is possible to create an alias for a Type, and to then use
that alias with the same behaviour as the original, except that the compiler that alias with the same behaviour as the original, except that the compiler
@ -127,10 +119,8 @@
} }
#+END_SRC #+END_SRC
** Maybe ** Maybe
:PROPERTIES:
:CUSTOM_ID: maybe
:END:
Allows specifying that a value may or may not be present. Similar to Allows specifying that a value may or may not be present. Similar to
=Optional=. =Maybe= provides additional methods that =Optional= doesn't: =Optional=. =Maybe= provides additional methods that =Optional= doesn't:
@ -180,7 +170,7 @@
=nothing= drops straight through the map and triggers the Runnable parameter =nothing= drops straight through the map and triggers the Runnable parameter
in the =match= call. in the =match= call.
**** =Maybe= is a Monad: *** =Maybe= is a Monad:
#+BEGIN_SRC java #+BEGIN_SRC java
package net.kemitix.mon; package net.kemitix.mon;
@ -231,9 +221,10 @@
} }
#+END_SRC #+END_SRC
**** Static Constructors
***** =static <T> Maybe<T> maybe(T value)= *** Static Constructors
**** =static <T> Maybe<T> maybe(T value)=
Create a Maybe for the value that may or may not be present. Create a Maybe for the value that may or may not be present.
@ -244,7 +235,8 @@
final Maybe<Integer> nothing = Maybe.maybe(null); final Maybe<Integer> nothing = Maybe.maybe(null);
#+END_SRC #+END_SRC
***** =static <T> Maybe<T> just(T value)=
**** =static <T> Maybe<T> just(T value)=
Create a Maybe for the value that is present. Create a Maybe for the value that is present.
@ -256,7 +248,8 @@
final Maybe<Integer> just = Maybe.just(1); final Maybe<Integer> just = Maybe.just(1);
#+END_SRC #+END_SRC
***** =static <T> Maybe<T> nothing()=
**** =static <T> Maybe<T> nothing()=
Create a Maybe for a lack of a value. Create a Maybe for a lack of a value.
@ -264,9 +257,10 @@
final Maybe<Integer> nothing = Maybe.nothing(); final Maybe<Integer> nothing = Maybe.nothing();
#+END_SRC #+END_SRC
**** Instance Methods
***** =Maybe<T> filter(Predicate<T> predicate)= *** Instance Methods
**** =Maybe<T> filter(Predicate<T> predicate)=
Filter a Maybe by the predicate, replacing with Nothing when it fails. Filter a Maybe by the predicate, replacing with Nothing when it fails.
@ -275,7 +269,8 @@
.filter(v -> v % 2 == 0); .filter(v -> v % 2 == 0);
#+END_SRC #+END_SRC
***** =<R> Maybe<R> map(Function<T,R> f)=
**** =<R> Maybe<R> map(Function<T,R> f)=
Applies the function to the value within the Maybe, returning the result within another Maybe. Applies the function to the value within the Maybe, returning the result within another Maybe.
@ -284,7 +279,8 @@
.map(v -> v * 100); .map(v -> v * 100);
#+END_SRC #+END_SRC
***** =<R> Maybe<R> flatMap(Function<T,Maybe<R>> f)=
**** =<R> Maybe<R> flatMap(Function<T,Maybe<R>> f)=
Applies the function to the value within the =Maybe=, resulting in another =Maybe=, then flattens the resulting =Maybe<Maybe<T>>= into =Maybe<T>=. Applies the function to the value within the =Maybe=, resulting in another =Maybe=, then flattens the resulting =Maybe<Maybe<T>>= into =Maybe<T>=.
@ -295,7 +291,8 @@
.flatMap(v -> Maybe.maybe(getValueFor(v))); .flatMap(v -> Maybe.maybe(getValueFor(v)));
#+END_SRC #+END_SRC
***** =void match(Consumer<T> just, Runnable nothing)=
**** =void match(Consumer<T> just, Runnable nothing)=
Matches the Maybe, either just or nothing, and performs either the Consumer, for Just, or Runnable for nothing. Matches the Maybe, either just or nothing, and performs either the Consumer, for Just, or Runnable for nothing.
@ -307,7 +304,8 @@
); );
#+END_SRC #+END_SRC
***** =T orElse(T otherValue)=
**** =T orElse(T otherValue)=
A value to use when Maybe is Nothing. A value to use when Maybe is Nothing.
@ -316,7 +314,8 @@
.orElse(1); .orElse(1);
#+END_SRC #+END_SRC
***** =T orElseGet(Supplier<T> otherValueSupplier)=
**** =T orElseGet(Supplier<T> otherValueSupplier)=
Provide a value to use when Maybe is Nothing. Provide a value to use when Maybe is Nothing.
@ -325,7 +324,8 @@
.orElseGet(() -> getDefaultValue()); .orElseGet(() -> getDefaultValue());
#+END_SRC #+END_SRC
***** =void orElseThrow(Supplier<Exception> error)=
**** =void orElseThrow(Supplier<Exception> error)=
Throw the exception if the Maybe is a Nothing. Throw the exception if the Maybe is a Nothing.
@ -334,7 +334,8 @@
.orElseThrow(() -> new RuntimeException("error")); .orElseThrow(() -> new RuntimeException("error"));
#+END_SRC #+END_SRC
***** =Maybe<T> peek(Consumer<T> consumer)=
**** =Maybe<T> peek(Consumer<T> consumer)=
Provide the value within the Maybe, if it exists, to the Consumer, and returns this Maybe. Conceptually equivalent to the idea of =ifPresent(...)=. Provide the value within the Maybe, if it exists, to the Consumer, and returns this Maybe. Conceptually equivalent to the idea of =ifPresent(...)=.
@ -343,7 +344,8 @@
.peek(v -> v.foo()); .peek(v -> v.foo());
#+END_SRC #+END_SRC
***** =void ifNothing(Runnable runnable)=
**** =void ifNothing(Runnable runnable)=
Run the runnable if the Maybe is a Nothing, otherwise do nothing. Run the runnable if the Maybe is a Nothing, otherwise do nothing.
@ -352,7 +354,8 @@
.ifNothing(() -> doSomething()); .ifNothing(() -> doSomething());
#+END_SRC #+END_SRC
***** =Stream<T> stream()=
**** =Stream<T> stream()=
Converts the Maybe into either a single value stream or an empty stream. Converts the Maybe into either a single value stream or an empty stream.
@ -361,7 +364,8 @@
.stream(); .stream();
#+END_SRC #+END_SRC
***** =boolean isJust()=
**** =boolean isJust()=
Checks if the Maybe is a Just. Checks if the Maybe is a Just.
@ -370,7 +374,8 @@
.isJust(); .isJust();
#+END_SRC #+END_SRC
***** =boolean isNothing()=
**** =boolean isNothing()=
Checks if the Maybe is Nothing. Checks if the Maybe is Nothing.
@ -379,7 +384,8 @@
.isNothing(); .isNothing();
#+END_SRC #+END_SRC
***** =Optional<T> toOptional()=
**** =Optional<T> toOptional()=
Convert the Maybe to an Optional. Convert the Maybe to an Optional.
@ -388,10 +394,8 @@
.toOptional(); .toOptional();
#+END_SRC #+END_SRC
** Result ** Result
:PROPERTIES:
:CUSTOM_ID: result
:END:
Allows handling error conditions without the need to catch exceptions. Allows handling error conditions without the need to catch exceptions.
@ -443,7 +447,7 @@
Result would have ignored the =flatMap= and skipped to the =match()= when it Result would have ignored the =flatMap= and skipped to the =match()= when it
would have called the error =Consumer=. would have called the error =Consumer=.
**** =Result= is a Monad *** =Result= is a Monad
#+BEGIN_SRC java #+BEGIN_SRC java
package net.kemitix.mon; package net.kemitix.mon;
@ -494,9 +498,10 @@
} }
#+END_SRC #+END_SRC
**** Static Constructors
***** =static <T> Result<T> of(Callable<T> callable)= *** Static Constructors
**** =static <T> Result<T> of(Callable<T> callable)=
Create a Result for a output of the Callable. Create a Result for a output of the Callable.
@ -511,7 +516,8 @@
final Result<Integer> error = Result.of(() -> {throw new RuntimeException();}); final Result<Integer> error = Result.of(() -> {throw new RuntimeException();});
#+END_SRC #+END_SRC
***** =static <T> Result<T> ok(T value)=
**** =static <T> Result<T> ok(T value)=
Create a Result for a success. Create a Result for a success.
@ -521,7 +527,8 @@
final Result<Integer> okay = Result.ok(1); final Result<Integer> okay = Result.ok(1);
#+END_SRC #+END_SRC
***** =static <T> Result<T> error(Throwable error)=
**** =static <T> Result<T> error(Throwable error)=
Create a Result for an error. Create a Result for an error.
@ -529,14 +536,15 @@
final Result<Integer> error = Result.error(new RuntimeException()); final Result<Integer> error = Result.error(new RuntimeException());
#+END_SRC #+END_SRC
**** Static Methods
*** Static Methods
These static methods provide integration with the =Maybe= class. These static methods provide integration with the =Maybe= class.
#+BEGIN_SRC java #+BEGIN_SRC java
#+END_SRC #+END_SRC
***** =static <T> Maybe<T> toMaybe(Result<T> result)= **** =static <T> Maybe<T> toMaybe(Result<T> result)=
Creates a =Maybe= from the =Result=, where the =Result= is a success, then Creates a =Maybe= from the =Result=, where the =Result= is a success, then
the =Maybe= will contain the value. However, if the =Result= is an error the =Maybe= will contain the value. However, if the =Result= is an error
@ -547,7 +555,8 @@
final Maybe<Integer> maybe = Result.toMaybe(result); final Maybe<Integer> maybe = Result.toMaybe(result);
#+END_SRC #+END_SRC
***** =static <T> Result<T> fromMaybe(Maybe<T> maybe, Supplier<Throwable> error)=
**** =static <T> Result<T> fromMaybe(Maybe<T> maybe, Supplier<Throwable> error)=
Creates a =Result= from the =Maybe=, where the =Result= will be an error Creates a =Result= from the =Maybe=, where the =Result= will be an error
if the =Maybe= is nothing. Where the =Maybe= is nothing, then the if the =Maybe= is nothing. Where the =Maybe= is nothing, then the
@ -558,7 +567,8 @@
final Result<Integer> result = Result.fromMaybe(maybe, () -> new NoSuchFileException("filename")); final Result<Integer> result = Result.fromMaybe(maybe, () -> new NoSuchFileException("filename"));
#+END_SRC #+END_SRC
***** =static <T> Result<Maybe<T>> invert(Maybe<Result<T>> maybeResult)=
**** =static <T> Result<Maybe<T>> invert(Maybe<Result<T>> maybeResult)=
Swaps the =Result= within a =Maybe=, so that =Result= contains a =Maybe=. Swaps the =Result= within a =Maybe=, so that =Result= contains a =Maybe=.
@ -567,7 +577,8 @@
final Result<Maybe<Integer>> result = Result.invert(maybe); final Result<Maybe<Integer>> result = Result.invert(maybe);
#+END_SRC #+END_SRC
***** =static <T,R> Result<Maybe<R>> flatMapMaybe(Result<Maybe<T>> maybeResult, Function<Maybe<T>,Result<Maybe<R>>> f)=
**** =static <T,R> Result<Maybe<R>> flatMapMaybe(Result<Maybe<T>> maybeResult, Function<Maybe<T>,Result<Maybe<R>>> f)=
Applies the function to the contents of a Maybe within the Result. Applies the function to the contents of a Maybe within the Result.
@ -576,9 +587,10 @@
final Result<Maybe<Integer>> maybeResult = Result.flatMapMaybe(result, maybe -> Result.of(() -> maybe.map(v -> v * 2))); final Result<Maybe<Integer>> maybeResult = Result.flatMapMaybe(result, maybe -> Result.of(() -> maybe.map(v -> v * 2)));
#+END_SRC #+END_SRC
**** Instance Methods
***** <R> Result<R> map(Function<T,R> f) *** Instance Methods
**** =<R> Result<R> map(Function<T,R> f)=
Applies the function to the value within the Functor, returning the result Applies the function to the value within the Functor, returning the result
within a Functor. within a Functor.
@ -588,7 +600,8 @@
.map(v -> String.valueOf(v)); .map(v -> String.valueOf(v));
#+END_SRC #+END_SRC
***** <R> Result<R> flatMap(Function<T,Result<R>> f)
**** =<R> Result<R> flatMap(Function<T,Result<R>> f)=
Returns a new Result consisting of the result of applying the function to Returns a new Result consisting of the result of applying the function to
the contents of the Result. the contents of the Result.
@ -598,7 +611,8 @@
.flatMap(v -> Result.of(() -> String.valueOf(v))); .flatMap(v -> Result.of(() -> String.valueOf(v)));
#+END_SRC #+END_SRC
***** <R> Result<R> andThen(Function<T,Callable<R>> f)
**** =<R> Result<R> andThen(Function<T,Callable<R>> f)=
Maps a Success Result to another Result using a Callable that is able to Maps a Success Result to another Result using a Callable that is able to
throw a checked exception. throw a checked exception.
@ -608,7 +622,8 @@
.andThen(v -> () -> {throw new IOException();}); .andThen(v -> () -> {throw new IOException();});
#+END_SRC #+END_SRC
***** void match(Consumer<T> onSuccess, Consumer<Throwable> onError)
**** =void match(Consumer<T> onSuccess, Consumer<Throwable> onError)=
Matches the Result, either success or error, and supplies the appropriate Matches the Result, either success or error, and supplies the appropriate
Consumer with the value or error. Consumer with the value or error.
@ -621,7 +636,8 @@
); );
#+END_SRC #+END_SRC
***** Result<T> recover(Function<Throwable,Result<T>> f)
**** =Result<T> recover(Function<Throwable,Result<T>> f)=
Provide a way to attempt to recover from an error state. Provide a way to attempt to recover from an error state.
@ -630,7 +646,8 @@
.recover(e -> Result.of(() -> getSafeValue(e))); .recover(e -> Result.of(() -> getSafeValue(e)));
#+END_SRC #+END_SRC
***** Result<T> peek(Consumer<T> consumer)
**** =Result<T> peek(Consumer<T> consumer)=
Provide the value within the Result, if it is a success, to the Consumer, Provide the value within the Result, if it is a success, to the Consumer,
and returns this Result. and returns this Result.
@ -640,7 +657,8 @@
.peek(v -> System.out.println(v)); .peek(v -> System.out.println(v));
#+END_SRC #+END_SRC
***** Result<T> thenWith(Function<T,WithResultContinuation<T>> f)
**** =Result<T> thenWith(Function<T,WithResultContinuation<T>> f)=
Perform the continuation with the current Result value then return the Perform the continuation with the current Result value then return the
current Result, assuming there was no error in the continuation. current Result, assuming there was no error in the continuation.
@ -651,7 +669,8 @@
.thenWith(v -> () -> {throw new IOException();}); .thenWith(v -> () -> {throw new IOException();});
#+END_SRC #+END_SRC
***** Result<Maybe<T>> maybe(Predicate<T> predicate)
**** =Result<Maybe<T>> maybe(Predicate<T> predicate)=
Wraps the value within the Result in a Maybe, either a Just if the Wraps the value within the Result in a Maybe, either a Just if the
predicate is true, or Nothing. predicate is true, or Nothing.
@ -661,7 +680,8 @@
.maybe(v -> v % 2 == 0); .maybe(v -> v % 2 == 0);
#+END_SRC #+END_SRC
***** T orElseThrow()
**** =T orElseThrow()=
Extracts the successful value from the result, or throws the error Extracts the successful value from the result, or throws the error
Throwable. Throwable.
@ -671,7 +691,8 @@
.orElseThrow(); .orElseThrow();
#+END_SRC #+END_SRC
***** void onError(Consumer<Throwable> errorConsumer)
**** =void onError(Consumer<Throwable> errorConsumer)=
A handler for error states. A handler for error states.
@ -680,7 +701,8 @@
.onError(e -> handleError(e)); .onError(e -> handleError(e));
#+END_SRC #+END_SRC
***** boolean isOkay()
**** =boolean isOkay()=
Checks if the Result is a success. Checks if the Result is a success.
@ -689,7 +711,8 @@
.isOkay(); .isOkay();
#+END_SRC #+END_SRC
***** boolean isError()
**** =boolean isError()=
Checks if the Result is an error. Checks if the Result is an error.
@ -697,3 +720,5 @@
final boolean isError = Result.of(() -> getValue()) final boolean isError = Result.of(() -> getValue())
.isError(); .isError();
#+END_SRC #+END_SRC