com.github.tonivade.purefun.instances.ReaderInstances Maven / Gradle / Ivy
/*
* Copyright (c) 2018-2020, Antonio Gabriel Muñoz Conejo
* Distributed under the terms of the MIT License
*/
package com.github.tonivade.purefun.instances;
import com.github.tonivade.purefun.Function1;
import com.github.tonivade.purefun.Kind;
import com.github.tonivade.purefun.monad.Reader;
import com.github.tonivade.purefun.monad.ReaderOf;
import com.github.tonivade.purefun.monad.Reader_;
import com.github.tonivade.purefun.typeclasses.Monad;
import com.github.tonivade.purefun.typeclasses.MonadReader;
@SuppressWarnings("unchecked")
public interface ReaderInstances {
static Monad> monad() {
return ReaderMonad.INSTANCE;
}
static MonadReader, R> monadReader() {
return ReaderMonadReader.INSTANCE;
}
}
interface ReaderMonad extends Monad> {
@SuppressWarnings("rawtypes")
ReaderMonad INSTANCE = new ReaderMonad() {};
@Override
default Reader pure(T value) {
return Reader.pure(value);
}
@Override
default Reader flatMap(Kind, ? extends T> value,
Function1 super T, ? extends Kind, ? extends V>> map) {
return ReaderOf.narrowK(value).flatMap(map.andThen(ReaderOf::narrowK));
}
}
interface ReaderMonadReader extends MonadReader, R>, ReaderMonad {
@SuppressWarnings("rawtypes")
ReaderMonadReader INSTANCE = new ReaderMonadReader() {};
@Override
default Kind, R> ask() {
return Reader.env();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy