com.github.tonivade.purefun.instances.WriterInstances Maven / Gradle / Ivy
/*
* Copyright (c) 2018-2022, Antonio Gabriel Muñoz Conejo
* Distributed under the terms of the MIT License
*/
package com.github.tonivade.purefun.instances;
import static com.github.tonivade.purefun.Precondition.checkNonNull;
import com.github.tonivade.purefun.Function1;
import com.github.tonivade.purefun.Kind;
import com.github.tonivade.purefun.monad.Writer;
import com.github.tonivade.purefun.monad.WriterOf;
import com.github.tonivade.purefun.monad.Writer_;
import com.github.tonivade.purefun.typeclasses.Monad;
import com.github.tonivade.purefun.typeclasses.Monoid;
public interface WriterInstances {
static Monad> monad(Monoid monoid) {
return WriterMonad.instance(checkNonNull(monoid));
}
}
interface WriterMonad extends Monad> {
static WriterMonad instance(Monoid monoid) {
return () -> monoid;
}
Monoid monoid();
@Override
default Writer pure(T value) {
return Writer.pure(monoid(), value);
}
@Override
default Writer flatMap(Kind, ? extends T> value,
Function1 super T, ? extends Kind, ? extends R>> map) {
return WriterOf.narrowK(value).flatMap(map.andThen(WriterOf::narrowK));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy