Packages

package eff

Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. eff
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. type /=[M[_], R] = MemberInOut[M, R]
  2. type <=[M[_], R] = Member[M, R]
  3. case class Arrs [R, A, B](functions: Vector[(Any) ⇒ Eff[R, Any]]) extends (A) ⇒ Eff[R, B] with Product with Serializable

    Sequence of monadic functions from A to B: A => Eff[B]

    Sequence of monadic functions from A to B: A => Eff[B]

    Internally it is represented as a Vector of functions:

    A => Eff[R, X1]; X1 => Eff[R, X2]; X2 => Eff[R, X3]; ...; X3 => Eff[R, B]

  4. trait Augment [T[_], O[_]] extends AnyRef
  5. trait BindRecʹ [M[_]] extends BindRec[M]

    Papers over the parameter order change in Scalaz 7.3

  6. trait Cache extends AnyRef

    This cache is used to memoize values for the Memoized effect

  7. case class CollectedUnions [M[_], R, U](effects: List[M[Any]], otherEffects: List[Union[U, Any]], indices: List[Int], otherIndices: List[Int]) extends Product with Serializable

    Collection of effects of a given type from a Unions objects

  8. case class ConcurrentHashMapCache (map: ConcurrentHashMap[AnyRef, Evaluated[Any]] = ...) extends Cache with Product with Serializable
  9. class ConcurrentWeakIdentityHashMap [K, V] extends ConcurrentMap[K, V]

  10. case class ConcurrentWeakIdentityHashMapCache (map: ConcurrentWeakIdentityHashMap[AnyRef, Evaluated[Any]] = ...) extends Cache with Product with Serializable
  11. trait DisjunctionCreation extends AnyRef
  12. trait DisjunctionEffect extends DisjunctionCreation with DisjunctionInterpretation

    Effect for computation which can fail

  13. trait DisjunctionInterpretation extends AnyRef
  14. sealed trait Eff [R, A] extends AnyRef

    Effects of type R, returning a value of type A

    Effects of type R, returning a value of type A

    It is implemented as a "Free-er" monad with extensible effects:

    • the "pure" case is a pure value of type A
    • the "impure" case is:
      • a disjoint union of possible effects
      • a continuation of type X => Eff[R, A] indicating what to do if the current effect is of type M[X] this type is represented by the Arrs type
    • the "impure applicative" case is:
      • list of disjoint unions of possible effects
      • a function to apply to the values resulting from those effects

    The monad implementation for this type is really simple:

    • point is Pure
    • bind simply appends the binding function to the Arrs continuation

    Important:

    The list of continuations is NOT implemented as a type sequence but simply as a Vector[Any => Eff[R, Any]]

    This means that various .asInstanceOf are present in the implementation and could lead to burns and severe harm. Use with caution!

    Similarly the list of effects in the applicative case is untyped and interpreters for those effects are supposed to create a list of values to feed the mapping function. If an interpreter doesn't create a list of values of the right size and with the right types, there will be a runtime exception.

    The Pure, Impure and ImpureAp cases also incorporate a "last" action returning no value but just used for side-effects (shutting down an execution context for example). This action is meant to be executed at the end of all computations, regardless of the number of flatMaps added on the Eff value.

    Since this last action will be executed, its value never collected so if it throws an exception it is possible to print it by defining the eff.debuglast system property (-Deff.debuglast=true)

    See also

    http://okmij.org/ftp/Haskell/extensible/more.pdf

  15. trait EffCreation extends AnyRef
  16. trait EffImplicits extends AnyRef
  17. trait EffInterpretation extends AnyRef
  18. sealed trait Effect [F[_]] extends AnyRef

    one effect, basically a type constructor

  19. trait ErrorCreation [F] extends ErrorTypes[F]
  20. trait ErrorEffect [F] extends ErrorCreation[F] with ErrorInterpretation[F]

    Effect for computation which can fail and return a Throwable, or just stop with a failure

    Effect for computation which can fail and return a Throwable, or just stop with a failure

    This effect is a mix of Eval and \/ in the sense that every computation passed to this effect (with the ok method) is considered "impure" or "faulty" by default.

    The type F is used to represent the failure type.

  21. trait ErrorInterpretation [F] extends ErrorCreation[F]
  22. trait ErrorTypes [F] extends AnyRef
  23. trait EvalCreation extends EvalTypes
  24. trait EvalEffect extends EvalTypes with EvalCreation with EvalInterpretation

    Effect for delayed computations

    Effect for delayed computations

    uses scalaz.Need as a supporting data structure

  25. trait EvalInterpretation extends EvalTypes
  26. trait EvalTypes extends AnyRef
  27. case class Evaluate [F, A](run: \/[\/[Throwable, F], Name[A]]) extends Product with Serializable
  28. case class EvaluateValue [A](a: Name[A]) extends Safe[A] with Product with Serializable
  29. trait Evaluated [+T] extends AnyRef
  30. case class ExecutorServices (executorServiceEval: Evaluated[ExecutorService], scheduledExecutorEval: Evaluated[ScheduledExecutorService], executionContextEval: Evaluated[ExecutionContext]) extends Product with Serializable
  31. case class FailedFinalizer (t: Throwable) extends Safe[Unit] with Product with Serializable
  32. case class FailedValue [A](t: Throwable) extends Safe[A] with Product with Serializable
  33. trait FutureCreation extends FutureTypes
  34. trait FutureEffect extends FutureCreation with FutureInterpretation
  35. trait FutureInterpretation extends FutureTypes
  36. trait FutureTypes extends AnyRef
  37. sealed trait Fx extends AnyRef

    Base type for a tree of effect types

  38. final case class Fx1 [F[_]](e: Effect[F]) extends Fx with Product with Serializable
  39. final case class Fx2 [L[_], R[_]](left: Effect[L], right: Effect[R]) extends Fx with Product with Serializable
  40. final case class Fx3 [L[_], M[_], R[_]](left: Effect[L], middle: Effect[M], right: Effect[R]) extends Fx with Product with Serializable
  41. final case class FxAppend [L, R](left: L, right: R) extends Fx with Product with Serializable

    Append a tree of effects to another one

  42. case class Impure [R, X, A](union: Union[R, X], continuation: Arrs[R, X, A], last: Last[R] = Last.none[R]) extends Eff[R, A] with Product with Serializable

    Impure is an effect (encoded as one possibility among other effects, a Union) and a continuation providing the next Eff value.

    Impure is an effect (encoded as one possibility among other effects, a Union) and a continuation providing the next Eff value.

    This essentially models a flatMap operation with the current effect and the monadic function to apply to a value once the effect is interpreted

    One effect can always be executed last, just for side-effects

  43. case class ImpureAp [R, X, A](unions: Unions[R, X], continuation: Arrs[R, List[Any], A], last: Last[R] = Last.none[R]) extends Eff[R, A] with Product with Serializable

    ImpureAp is a list of independent effects and a pure function creating a value with all the resulting values once all effects have been interpreted.

    ImpureAp is a list of independent effects and a pure function creating a value with all the resulting values once all effects have been interpreted.

    This essentially models a sequence + map operation but it is important to understand that the list of Union objects can represent different effects and be like: List[Option[Int], Future[String], Option[Int]].

    Interpreting such an Eff value for a given effect (say Option) consists in:

    • grouping all the Option values,
    • sequencing them
    • pass them to a continuation which will apply the 'map' functions when the other effects (Future in the example above) will have been interpreted

    VERY IMPORTANT:

    • this object is highly unsafe
    • the size of the list argument to 'map' must always be equal to the number of unions in the Unions object
    • the types of the elements in the list argument to 'map' must be the exact types of each effect in unions.unions
  44. trait Interpret extends AnyRef

    Support methods to create interpreters (or "effect handlers") for a given effect M and a value Eff[R, A] when M is a member of R.

    Support methods to create interpreters (or "effect handlers") for a given effect M and a value Eff[R, A] when M is a member of R.

    Those methods guarantee a stack-safe behaviour when running on a large list of effects (in list.traverse(f) for example).

    There are different types of supported interpreters:

    1. "interpret" + Recurse

    This interpreter is used to handle effects which either return a value X from M[X] or stops with Eff[R, B] See an example of such an interpreter in Eval where we just evaluate a computation X for each Eval[X].

    2. "interpretState" + StateRecurse

    This interpreter is used to handle effects which either return a value X from M[X] or stops with Eff[R, B]

    3. "interpretLoop" + Loop

    The most generic kind of interpreter where we can even recurse in the case of Pure(a) (See ListEffect for such a use)

    4. "intercept / interceptState / interceptLoop" methods are similar but they transform an effect to other effects in the same stack without removing it from the stack

    5. "transform" to swap an effect T of a stack to another effect, using a Natural Transformation

    6. "translate" to interpret one effect of a stack into other effects of the same stack using a Natural Transformation this is a specialized version of interpret + Recurse

    7. "interpretUnsafe + SideEffect" when you have a side effecting function M[X] => X

  45. trait IntoPoly [R, U] extends AnyRef

    Typeclass proving that it is possible to send a tree of effects R into another tree of effects U

    Typeclass proving that it is possible to send a tree of effects R into another tree of effects U

    for example

    send[Option1, Fx.fx3[Option1, Option2, Option3], Int](Option1(1)). into[Fx.fx5[Option1, Option2, Option3, Option4, Option5]]

    should work because all the effects of the first stack are present in the second

    Note: some implicit definitions are probably missing in some cases

  46. trait IntoPolyLower1 extends IntoPolyLower2
  47. trait IntoPolyLower2 extends IntoPolyLower3
  48. trait IntoPolyLower3 extends IntoPolyLower4
  49. trait IntoPolyLower4 extends IntoPolyLower5
  50. trait IntoPolyLower5 extends AnyRef
  51. case class Last [R](value: Option[Name[Eff[R, Unit]]]) extends Product with Serializable

    Encapsulation of one optional last action to execute at the end of the program

  52. trait Loop [M[_], R, A, B, C] extends AnyRef

    Generalisation of Recurse and StateRecurse

    Generalisation of Recurse and StateRecurse

    The loop defines some state with an initial value which is maintained at each step of the interpretation.

    A is the type of Eff values to interpret, and B is the result of the interpretation (generally an other Eff value)

    C is the type of result for "last" actions.

    - the interpretation of a Pure value either returns the final result or possibly one more Eff value to interpret

    - onEffect interprets one effect and possibly uses the continuation to produce the next value to interpret. If no X can be used to run the continuation we might just output one final B value

    • onLastEffect interprets the last effect of an Eff value. The only difference with onEffect is the fact that last actions return Unit values (and not A values)
    • onApplicativeEff interprets a list of effects and possibly uses the continuation to get to the next value to interpret. If no interpretation can be done, a B value might be returned
    • onLastApplicativeEffect does the same thing for last actions
  53. trait Member [T[_], R] extends MemberInOut[T, R]
    Annotations
    @implicitNotFound( ... )
  54. trait MemberIn [T[_], R] extends AnyRef
    Annotations
    @implicitNotFound( ... )
  55. trait MemberInLower1 extends MemberInLower2
  56. trait MemberInLower2 extends MemberInLower3
  57. trait MemberInLower3 extends MemberInLower4
  58. trait MemberInLower4 extends MemberInLower5
  59. trait MemberInLower5 extends AnyRef
  60. trait MemberInOut [T[_], R] extends MemberIn[T, R]
    Annotations
    @implicitNotFound( ... )
  61. trait MemberInOutLower1 extends MemberInOutLower2
  62. trait MemberInOutLower2 extends MemberInOutLower3
  63. trait MemberInOutLower3 extends MemberInOutLower4
  64. trait MemberInOutLower4 extends MemberInOutLower5
  65. trait MemberInOutLower5 extends AnyRef
  66. trait MemberLower1 extends MemberLower2
  67. trait MemberLower10 extends MemberLower11
  68. trait MemberLower11 extends MemberLower12
  69. trait MemberLower12 extends MemberLower13
  70. trait MemberLower13 extends MemberLower14
  71. trait MemberLower14 extends MemberLower15
  72. trait MemberLower15 extends MemberLower16
  73. trait MemberLower16 extends MemberLower17
  74. trait MemberLower17 extends MemberLower18
  75. trait MemberLower18 extends MemberLower19
  76. trait MemberLower19 extends AnyRef
  77. trait MemberLower2 extends MemberLower3
  78. trait MemberLower3 extends MemberLower4
  79. trait MemberLower4 extends MemberLower5
  80. trait MemberLower5 extends MemberLower6
  81. trait MemberLower6 extends MemberLower7
  82. trait MemberLower7 extends MemberLower8
  83. trait MemberLower8 extends MemberLower9
  84. trait MemberLower9 extends MemberLower10
  85. case class Memoized [T](t: () ⇒ T) extends Evaluated[T] with Product with Serializable
  86. class NoFx extends Fx

    The "empty" tree of effects

  87. case class Pure [R, A](value: A, last: Last[R] = Last.none[R]) extends Eff[R, A] with Product with Serializable
  88. trait Recurse [M[_], R, A] extends AnyRef

    Helper trait for computations which might produce several M[X] in a stack of effects.

    Helper trait for computations which might produce several M[X] in a stack of effects.

    Either we can produce an X to pass to a continuation or we're done

    For the applicative case we expect to be able to traverse a list of effects and return an effect of a list of results OR completely consume the effect and return a pure list of values

  89. sealed trait Safe [A] extends AnyRef

    The Safe type is a mix of a ThrowableEither / Eval effect and a writer effect to collect finalizer failures

  90. trait SafeCreation extends SafeTypes
  91. trait SafeEffect extends SafeCreation with SafeInterpretation
  92. trait SafeInterpretation extends SafeCreation
  93. trait SafeTypes extends AnyRef
  94. trait SequenceCached [M[_]] extends AnyRef

    type class for effects which can be cached in a SequenceCache

  95. trait SideEffect [T[_]] extends AnyRef
  96. trait StateCreation extends AnyRef
  97. trait StateEffect extends StateCreation with StateInterpretation

    Effect for passing state along computations

    Effect for passing state along computations

    Internally backed up by scalaz.State

  98. trait StateImplicits extends AnyRef
  99. trait StateInterpretation extends AnyRef
  100. trait StatelessLoop [M[_], R, A, B, C] extends AnyRef

    Generalisation of Recurse

  101. final case class TimedFuture [A](callback: (ScheduledExecutorService, ExecutionContext) ⇒ Future[A], timeout: Option[FiniteDuration] = None) extends Product with Serializable
  102. trait Translate [T[_], U] extends AnyRef

    trait for translating one effect into other ones in the same stack

  103. sealed trait Union [+R, A] extends AnyRef

    Union represents one effect T[_] embedded in a tree of possible effects R

    Union represents one effect T[_] embedded in a tree of possible effects R

    Since the effect tree is represented with the following cases:

    • Fx1[T]
    • Fx2[T1, T2]
    • Fx3[T1, T2, T3]
    • FxAppend[L, R]

    We have the corresponding Union cases. For example T2 is in the "middle" of Fx3[T1, T2, T3] so creating a Union object for that effect uses Union3M

  104. case class Union1 [T[_], A](ta: T[A]) extends Union[Fx1[T], A] with Product with Serializable
  105. sealed trait Union2 [R, A] extends Union[R, A]
  106. case class Union2L [L[_], R[_], A](t: L[A]) extends Union2[Fx2[L, R], A] with Product with Serializable
  107. case class Union2R [L[_], R[_], A](t: R[A]) extends Union2[Fx2[L, R], A] with Product with Serializable
  108. sealed trait Union3 [R, A] extends Union[R, A]
  109. case class Union3L [L[_], M[_], R[_], A](t: L[A]) extends Union3[Fx3[L, M, R], A] with Product with Serializable
  110. case class Union3M [L[_], M[_], R[_], A](t: M[A]) extends Union3[Fx3[L, M, R], A] with Product with Serializable
  111. case class Union3R [L[_], M[_], R[_], A](t: R[A]) extends Union3[Fx3[L, M, R], A] with Product with Serializable
  112. sealed trait UnionAppend [R, A] extends Union[R, A]
  113. case class UnionAppendL [L, R, A](t: Union[L, A]) extends UnionAppend[FxAppend[L, R], A] with Product with Serializable
  114. case class UnionAppendR [L, R, A](t: Union[R, A]) extends UnionAppend[FxAppend[L, R], A] with Product with Serializable
  115. trait UnionInto [R, S] extends AnyRef
  116. case class Unions [R, A](first: Union[R, A], rest: List[Union[R, Any]]) extends Product with Serializable

    A non-empty list of Unions.

    A non-empty list of Unions.

    It is only partially typed, we just keep track of the type of the first object

  117. trait Write [T[_], O] extends AnyRef
  118. trait WriterCreation extends AnyRef
  119. trait WriterEffect extends WriterCreation with WriterInterpretation

    Effect for logging values alongside computations

    Effect for logging values alongside computations

    Compared to traditional Writer monad which accumulates values by default this effect can be interpreted in different ways:

    • log values to the console or to a file as soon as they are produced
    • accumulate values in a list
  120. trait WriterInterpretation extends AnyRef
  121. type |=[M[_], R] = MemberIn[M, R]

Value Members

  1. object Arrs extends Serializable
  2. object ConsoleEffect
  3. object DisjunctionCreation extends DisjunctionCreation
  4. object DisjunctionEffect extends DisjunctionEffect
  5. object DisjunctionInterpretation extends DisjunctionInterpretation
  6. object Eff extends EffCreation with EffInterpretation with EffImplicits
  7. object EffCreation extends EffCreation
  8. object EffImplicits extends EffImplicits
  9. object EffInterpretation extends EffInterpretation
  10. object ErrorEffect extends ErrorEffect[String]

    Simple instantiation of the ErrorEffect trait with String as a Failure type

  11. object EvalEffect extends EvalEffect
  12. object EvalInterpretation extends EvalInterpretation
  13. object EvalTypes extends EvalTypes
  14. object Evaluate extends Serializable
  15. object ExecutorServices extends Serializable
  16. object FutureCreation extends FutureCreation
  17. object FutureEffect extends FutureEffect
  18. object FutureInterpretation extends FutureInterpretation
  19. object Fx
  20. object Interpret extends Interpret
  21. object IntoPoly extends IntoPolyLower1
  22. object Last extends Serializable
  23. object Member extends MemberLower1
  24. object MemberIn extends MemberInLower1
  25. object MemberInOut extends MemberInOutLower1
  26. object Memoized extends Serializable
  27. object NoFx extends NoFx
  28. object Now
  29. object SafeEffect extends SafeEffect
  30. object SafeInterpretation extends SafeInterpretation
  31. object StateCreation extends StateCreation
  32. object StateEffect extends StateEffect
  33. object StateImplicits extends StateImplicits
  34. object StateInterpretation extends StateInterpretation
  35. object SubscribeEffect

    This effect is used in the implementation of the Async effect

  36. object TimedFuture extends Serializable
  37. object WarningsEffect
  38. object WriterCreation extends WriterCreation
  39. object WriterEffect extends WriterEffect
  40. object WriterInterpretation extends WriterInterpretation
  41. object all extends WriterEffect with EvalEffect with StateEffect with DisjunctionEffect with SafeEffect with EffInterpretation with EffCreation with EffImplicits
  42. object create extends WriterCreation with EvalCreation with StateCreation with DisjunctionCreation with SafeCreation with EffCreation
  43. object disjunction extends DisjunctionCreation with DisjunctionInterpretation
  44. object eff extends EffCreation with EffInterpretation
  45. object eval extends EvalEffect
  46. object interpret extends Interpret
  47. object safe extends SafeCreation with SafeInterpretation
  48. object state extends StateCreation with StateInterpretation
  49. object writer extends WriterCreation with WriterInterpretation

Inherited from AnyRef

Inherited from Any

Ungrouped