|
Scala example source code file (ApplySyntax.scala)
The ApplySyntax.scala Scala example source codepackage scalaz package syntax /** Wraps a value `self` and provides methods related to `Apply` */ final class ApplyOps[F[_],A] private[syntax](val self: F[A])(implicit val F: Apply[F]) extends Ops[F[A]] { //// final def <*>[B](f: F[A => B]): F[B] = F.ap(self)(f) final def tuple[B](f: F[B]): F[(A,B)] = F.tuple2(self,f) /** Combine `self` and `fb` according to `Apply[F]` and discard the `A`(s) */ final def *>[B](fb: F[B]): F[B] = F.discardLeft(self,fb) /** Combine `self` and `fb` according to `Apply[F]` and discard the `B`(s) */ final def <*[B](fb: F[B]): F[A] = F.discardRight(self,fb) /** * DSL for constructing Applicative expressions. * * `(f1 |@| f2 |@| ... |@| fn)((v1, v2, ... vn) => ...)` is an alternative to `Apply[F].applyN(f1, f2, ..., fn)((v1, v2, ... vn) => ...)` * * `(f1 |@| f2 |@| ... |@| fn).tupled` is an alternative to `Apply[F].applyN(f1, f2, ..., fn)(TupleN.apply _)` * * Warning: each call to `|@|` leads to an allocation of wrapper object. For performance sensitive code, consider using * [[scalaz.Apply]]`#applyN` directly. */ final def |@|[B](fb: F[B]) = new ApplicativeBuilder[F, A, B] { val a: F[A] = self val b: F[B] = fb } /** Alias for `|@|` */ final def ⊛[B](fb: F[B]) = |@|(fb) /** * Repeats this applicative action infinitely. */ final def forever[B]: F[B] = F.forever(self) // Do not remove this comment; used as delimiter by `genTypeClasses` sbt task. //// } sealed trait ToApplyOps0 { implicit def ToApplyOpsUnapply[FA](v: FA)(implicit F0: Unapply[Apply, FA]) = new ApplyOps[F0.M,F0.A](F0(v))(F0.TC) } trait ToApplyOps extends ToApplyOps0 with ToFunctorOps { implicit def ToApplyOps[F[_],A](v: F[A])(implicit F0: Apply[F]) = new ApplyOps[F,A](v) //// def ^[F[_],A,B,C](fa: => F[A], fb: => F[B])( f: (A, B) => C)(implicit F: Apply[F]): F[C] = F.apply2(fa, fb)(f) def ^^[F[_],A,B,C,D](fa: => F[A], fb: => F[B], fc: => F[C])( f: (A, B, C) => D)(implicit F: Apply[F]): F[D] = F.apply3(fa, fb, fc)(f) def ^^^[F[_],A,B,C,D,E](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D])( f: (A,B,C,D) => E)(implicit F: Apply[F]): F[E] = F.apply4(fa, fb, fc, fd)(f) def ^^^^[F[_],A,B,C,D,E,I](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E])( f: (A,B,C,D,E) => I)(implicit F: Apply[F]): F[I] = F.apply5(fa, fb, fc, fd, fe)(f) def ^^^^^[F[_],A,B,C,D,E,I,J](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E], fi: => F[I])( f: (A,B,C,D,E,I) => J)(implicit F: Apply[F]): F[J] = F.apply6(fa, fb, fc, fd, fe, fi)(f) def ^^^^^^[F[_],A,B,C,D,E,I,J,K](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E], fi: => F[I], fj: => F[J])( f: (A,B,C,D,E,I,J) => K)(implicit F: Apply[F]): F[K] = F.apply7(fa, fb, fc, fd, fe, fi, fj)(f) //// } trait ApplySyntax[F[_]] extends FunctorSyntax[F] { implicit def ToApplyOps[A](v: F[A]): ApplyOps[F, A] = new ApplyOps[F,A](v)(ApplySyntax.this.F) def F: Apply[F] //// def ^[A,B,C](fa: => F[A], fb: => F[B])( f: (A, B) => C): F[C] = F.apply2(fa, fb)(f) def ^^[A,B,C,D](fa: => F[A], fb: => F[B], fc: => F[C])( f: (A, B, C) => D): F[D] = F.apply3(fa, fb, fc)(f) def ^^^[A,B,C,D,E](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D])( f: (A,B,C,D) => E): F[E] = F.apply4(fa, fb, fc, fd)(f) def ^^^^[A,B,C,D,E,I](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E])( f: (A,B,C,D,E) => I): F[I] = F.apply5(fa, fb, fc, fd, fe)(f) def ^^^^^[A,B,C,D,E,I,J](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E], fi: => F[I])( f: (A,B,C,D,E,I) => J): F[J] = F.apply6(fa, fb, fc, fd, fe, fi)(f) def ^^^^^^[A,B,C,D,E,I,J,K](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E], fi: => F[I], fj: => F[J])( f: (A,B,C,D,E,I,J) => K): F[K] = F.apply7(fa, fb, fc, fd, fe, fi, fj)(f) //// } Other Scala examples (source code examples)Here is a short list of links related to this Scala ApplySyntax.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.