Trait

scala

Curried

Related Doc: package scala

Permalink

trait Curried extends CurriedWithTypeParameters

A marker trait that enables curried varargs.

Given a function call f(a, b, c), when f is a subtype of Curried, it should be rewritten to f.applyBegin.applyNext(a).applyNext(b).applyNext(c).applyEnd.

Optionally, some arguments to a Curried call may be a sequence argument marked as _*. Given a function call f(p1, s1: _*, p2), when translating it to the curried form, the sequence argument will becomes a foldLeft call.

f.applyBegin
  .applyNext(p1)
  .applyNextSeq(s1)
  .applyNext(p2)
.applyEnd

Unlike traditional repeated parameters, which restrict the sequence argument at the last position, sequence arguments in a curried call are allowed at any position.

When a Curried is invoked with some type arguments, those type arguments will be moved to the applyBegin method. Therefore, List[Int](1 to 3: _*) should be translated to (1 to 3).foldLeft(List.applyBegin[Int])(_.applyNext(_)).applyEnd.

Source
Curried.scala
Example:
  1. Fast list builder

    class PartiallyAppliedInitializer[A](builder: collection.mutable.Builder[A, List[A]]) {
      def applyEnd = builder.result
      def applyNextSeq(seq: Seq[A]) = {
        builder ++= seq
        this
      }
      def applyNext(a: A) = {
        builder += a
        this
      }
    }
    object FastListInitializer extends Curried {
      def applyBegin[A]:PartiallyAppliedInitializer[A] = new PartiallyAppliedInitializer(List.newBuilder[A])
    }
    FastListInitializer(0, 4) should be(List(0, 4))
    FastListInitializer[Int](0, 100 to 103: _*, 1) should be(List(0, 100, 101, 102, 103, 1))
Linear Supertypes
CurriedWithTypeParameters, Any
Type Hierarchy
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Curried
  2. CurriedWithTypeParameters
  3. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Abstract Value Members

  1. abstract def getClass(): Class[_]

    Permalink
    Definition Classes
    Any

Concrete Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    Any
  3. def +(other: String): String

    Permalink
    Implicit information
    This member is added by an implicit conversion from Curried to any2stringadd[Curried] performed by method any2stringadd in scala.Predef.
    Definition Classes
    any2stringadd
  4. def ->[B](y: B): (Curried, B)

    Permalink
    Implicit information
    This member is added by an implicit conversion from Curried to ArrowAssoc[Curried] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc
    Annotations
    @inline()
  5. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    Any
  6. macro def apply(varargs: Any*): Any

    Permalink
  7. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  8. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  9. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  10. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  11. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  12. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  13. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  14. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  15. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  16. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  17. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  18. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  19. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7, A8, A9](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  20. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7, A8](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  21. macro def apply[A0, A1, A2, A3, A4, A5, A6, A7](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  22. macro def apply[A0, A1, A2, A3, A4, A5, A6](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  23. macro def apply[A0, A1, A2, A3, A4, A5](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  24. macro def apply[A0, A1, A2, A3, A4](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  25. macro def apply[A0, A1, A2, A3](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  26. macro def apply[A0, A1, A2](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  27. macro def apply[A0, A1](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  28. macro def apply[A0](varargs: Any*): Any

    Permalink
    Definition Classes
    CurriedWithTypeParameters
  29. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  30. def ensuring(cond: (Curried) ⇒ Boolean, msg: ⇒ Any): Curried

    Permalink
    Implicit information
    This member is added by an implicit conversion from Curried to Ensuring[Curried] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  31. def ensuring(cond: (Curried) ⇒ Boolean): Curried

    Permalink
    Implicit information
    This member is added by an implicit conversion from Curried to Ensuring[Curried] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  32. def ensuring(cond: Boolean, msg: ⇒ Any): Curried

    Permalink
    Implicit information
    This member is added by an implicit conversion from Curried to Ensuring[Curried] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  33. def ensuring(cond: Boolean): Curried

    Permalink
    Implicit information
    This member is added by an implicit conversion from Curried to Ensuring[Curried] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  34. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    Any
  35. def formatted(fmtstr: String): String

    Permalink
    Implicit information
    This member is added by an implicit conversion from Curried to StringFormat[Curried] performed by method StringFormat in scala.Predef.
    Definition Classes
    StringFormat
    Annotations
    @inline()
  36. def hashCode(): Int

    Permalink
    Definition Classes
    Any
  37. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  38. def toString(): String

    Permalink
    Definition Classes
    Any
  39. def [B](y: B): (Curried, B)

    Permalink
    Implicit information
    This member is added by an implicit conversion from Curried to ArrowAssoc[Curried] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc

Inherited from CurriedWithTypeParameters

Inherited from Any

Inherited by implicit conversion any2stringadd from Curried to any2stringadd[Curried]

Inherited by implicit conversion StringFormat from Curried to StringFormat[Curried]

Inherited by implicit conversion Ensuring from Curried to Ensuring[Curried]

Inherited by implicit conversion ArrowAssoc from Curried to ArrowAssoc[Curried]

Ungrouped