Packages

final case class Functoid[+A](get: Provider) extends AbstractFunctoid[A, Functoid] with Product with Serializable

A function that receives its arguments from DI object graph, including named instances via izumi.distage.model.definition.Id annotation.

The following syntaxes are supported by extractor macro:

Inline lambda:

make[Unit].from {
  i: Int @Id("special") => ()
}

Method reference:

def constructor(@Id("special") i: Int): Unit = ()

make[Unit].from(constructor _)

make[Unit].from(constructor(_))

Function value with an annotated signature:

val constructor: (Int @Id("special"), String @Id("special")) => Unit = (_, _) => ()

make[Unit].from(constructor)

Using intermediate vals will lose annotations when converting a method into a function value, Prefer passing inline lambdas such as { x => y } or method references such as (method _) or (method(_)).:

def constructorMethod(@Id("special") i: Int): Unit = ()

val constructor = constructorMethod _

make[Unit].from(constructor) // SURPRISE: Will summon regular Int, not a "special" Int from DI object graph
make[Unit].from(constructorMethod _) // Will work correctly: summon "special" Int

Prefer annotating parameter types, not parameters: class X(i: Int @Id("special")) { ... }

final case class X(i: Int @Id("special"))

make[X].from(X.apply _) // summons special Int

Functoid forms an applicative functor via its izumi.distage.model.providers.Functoid.pure & izumi.distage.model.providers.AbstractFunctoid.map2 methods

Note

javax.inject.Named annotation is also supported

See also

izumi.distage.reflection.macros.FunctoidMacro]

Functoid is based on the Magnet Pattern: http://spray.io/blog/2012-12-13-the-magnet-pattern/

Essentially Functoid is a function-like entity with additional properties, so it's funny name is reasonable enough: https://en.wiktionary.org/wiki/-oid#English

Linear Supertypes
Serializable, Product, Equals, AbstractFunctoid[A, Functoid], AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Functoid
  2. Serializable
  3. Product
  4. Equals
  5. AbstractFunctoid
  6. AnyRef
  7. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Instance Constructors

  1. new Functoid(get: Provider)

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. def addDependencies(keys: Iterable[DIKey]): Functoid[A]
    Definition Classes
    AbstractFunctoid
  5. def addDependency(key: DIKey): Functoid[A]
    Definition Classes
    AbstractFunctoid
  6. def addDependency[B](name: Identifier)(implicit arg0: Tag[B]): Functoid[A]
    Definition Classes
    AbstractFunctoid
  7. def addDependency[B](implicit arg0: Tag[B]): Functoid[A]

    Add B as an unused dependency of this Functoid

    Add B as an unused dependency of this Functoid

    Definition Classes
    AbstractFunctoid
  8. def annotateAllParameters(name: Identifier): Functoid[A]

    Add an @Id(name) annotation to all unannotated parameters

    Add an @Id(name) annotation to all unannotated parameters

    Definition Classes
    AbstractFunctoid
  9. def annotateParameter[P](name: Identifier)(implicit arg0: Tag[P]): Functoid[A]

    Add an @Id annotation to an unannotated parameter P, e.g.

    Add an @Id annotation to an unannotated parameter P, e.g. for .annotateParameter[P]("my-id"), transform lambda (p: P) => x(p) into (p: P @Id("my-id")) => x(p)

    Definition Classes
    AbstractFunctoid
  10. def annotateParameterWhen(name: Identifier)(predicate: (BasicKey) => Boolean): Functoid[A]

    Add an @Id(name) annotation to all parameters matching predicate

    Add an @Id(name) annotation to all parameters matching predicate

    Definition Classes
    AbstractFunctoid
  11. def ap[B, C](that: Functoid[B])(implicit ev: <:<[A, (B) => C], tag: Tag[C]): Functoid[C]

    Apply a function produced by this Functoid to the argument produced by that Functoid.

    Apply a function produced by this Functoid to the argument produced by that Functoid.

    Same as

    this.map2(that)((f, a) => f(a))
    Definition Classes
    AbstractFunctoid
  12. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  13. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  14. def create[B](provider: Provider): Functoid[B]
    Attributes
    protected
    Definition Classes
    FunctoidAbstractFunctoid
  15. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  16. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  17. def flatAp[B](that: Functoid[(A) => B])(implicit arg0: Tag[B]): Functoid[B]

    Applicative's ap method - can be used to chain transformations like flatMap.

    Applicative's ap method - can be used to chain transformations like flatMap.

    Apply a function produced by that Functoid to the value produced by this Functoid.

    Same as

    this.map2(that)((a, f) => f(a))
    Definition Classes
    AbstractFunctoid
  18. val get: Provider
    Definition Classes
    FunctoidAbstractFunctoid
  19. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  20. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  21. def map[B](f: (A) => B)(implicit arg0: Tag[B]): Functoid[B]
    Definition Classes
    AbstractFunctoid
  22. def map2[B, C](that: Functoid[B])(f: (A, B) => C)(implicit arg0: Tag[C]): Functoid[C]
    Definition Classes
    AbstractFunctoid
  23. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  24. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  25. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  26. def productElementNames: Iterator[String]
    Definition Classes
    Product
  27. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  28. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  29. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  30. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()
  31. def zip[B](that: Functoid[B]): Functoid[(A, B)]
    Definition Classes
    AbstractFunctoid

Inherited from Serializable

Inherited from Product

Inherited from Equals

Inherited from AbstractFunctoid[A, Functoid]

Inherited from AnyRef

Inherited from Any

Ungrouped