com.github.tonivade.purefun.instances.WriterTInstances Maven / Gradle / Ivy
/*
* Copyright (c) 2018-2019, Antonio Gabriel Muñoz Conejo
* Distributed under the terms of the MIT License
*/
package com.github.tonivade.purefun.instances;
import static java.util.Objects.requireNonNull;
import com.github.tonivade.purefun.Function1;
import com.github.tonivade.purefun.Higher1;
import com.github.tonivade.purefun.Instance;
import com.github.tonivade.purefun.Kind;
import com.github.tonivade.purefun.transformer.WriterT;
import com.github.tonivade.purefun.typeclasses.Monad;
import com.github.tonivade.purefun.typeclasses.Monoid;
public interface WriterTInstances {
static Monad, L>> monad(Monoid monoid, Monad monadF) {
requireNonNull(monoid);
requireNonNull(monadF);
return new WriterTMonad() {
@Override
public Monoid monoid() { return monoid; }
@Override
public Monad monadF() { return monadF; }
};
}
}
@Instance
interface WriterTMonad extends Monad, L>> {
Monad monadF();
Monoid monoid();
@Override
default WriterT pure(T value) {
return WriterT.pure(monoid(), monadF(), value);
}
@Override
default WriterT flatMap(Higher1, L>, T> value,
Function1, L>, R>> map) {
return WriterT.narrowK(value).flatMap(map.andThen(WriterT::narrowK));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy