All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.tonivade.purefun.instances.ConstInstances 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 com.github.tonivade.purefun.Eq;
import com.github.tonivade.purefun.Function1;
import com.github.tonivade.purefun.Higher1;
import com.github.tonivade.purefun.Instance;
import com.github.tonivade.purefun.type.Const;
import com.github.tonivade.purefun.typeclasses.Contravariant;
import com.github.tonivade.purefun.typeclasses.Functor;

public interface ConstInstances {

  static  Eq, A>> eq(Eq eq) {
    return (a, b) -> eq.eqv(a.fix1(Const::narrowK).get(), a.fix1(Const::narrowK).get());
  }

  static  Functor> functor() {
    return new ConstFunctor() {};
  }

  static  Contravariant> contravariant() {
    return new ConstContravariant() {};
  }
}

@Instance
interface ConstFunctor extends Functor> {

  @Override
  default  Const map(Higher1, A> value, Function1 map) {
    return value.fix1(Const::narrowK).retag();
  }
}

@Instance
interface ConstContravariant extends Contravariant> {

  @Override
  default  Const contramap(Higher1, A> value, Function1 map) {
    return value.fix1(Const::narrowK).retag();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy