Allow Functor.map() to return type-safe Functor subclasses
This commit is contained in:
parent
283e7a2f46
commit
41f9227afd
3 changed files with 6 additions and 5 deletions
|
@ -34,18 +34,19 @@ import java.util.function.Function;
|
|||
* </ul>
|
||||
*
|
||||
* @param <T> the type of the Functor
|
||||
* @param <F> the type of the mapped Functor
|
||||
*
|
||||
* @author Tomasz Nurkiewicz (?@?.?)
|
||||
*/
|
||||
public interface Functor<T> {
|
||||
public interface Functor<T, F extends Functor<?, ?>> {
|
||||
|
||||
/**
|
||||
* Applies the function to the value within the Functor, returning the result within a Functor.
|
||||
*
|
||||
* @param f the function to apply
|
||||
* @param <R> the type of the result of the function
|
||||
* @param <R> the type of the content of the mapped functor
|
||||
*
|
||||
* @return a Functor containing the result of the function {@code f} applied to the value
|
||||
*/
|
||||
<R> Functor<R> map(Function<T, R> f);
|
||||
<R> F map(Function<T, R> f);
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ import java.util.function.Function;
|
|||
* @author Paul Campbell (pcampbell@kemitix.net)
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
class Identity<T> implements Functor<T> {
|
||||
class Identity<T> implements Functor<T, Identity<?>> {
|
||||
|
||||
private final T value;
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ import java.util.function.Supplier;
|
|||
* @author Paul Campbell (pcampbell@kemitix.net)
|
||||
*/
|
||||
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
|
||||
public class Mon<T> implements Functor<T> {
|
||||
public class Mon<T> implements Functor<T, Mon<?>> {
|
||||
|
||||
/**
|
||||
* The value.
|
||||
|
|
Loading…
Reference in a new issue