Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Using Scala 2.10 and shapeless:</p> <pre><code>import shapeless.Nat._ import shapeless.{Nat, Succ} trait Curry[T, Res, N &lt;: Nat] { type Out def apply(as: Seq[T], f : Seq[T] =&gt; Res) : Out } object Curry { implicit def curry[Out0, T, Res, N &lt;: Nat](implicit curry : CurryAux[Out0, T, Res, N]) = new Curry[T, Res, N] { type Out = Out0 def apply(as: Seq[T], f : Seq[T] =&gt; Res) = curry(as, f) } } trait CurryAux[Out, T, Res, N &lt;: Nat] { def apply(as: Seq[T], f : Seq[T] =&gt; Res) : Out } object CurryAux { implicit def curry0[Res, T] = new CurryAux[Res, T, Res, _0] { def apply(as: Seq[T], f : Seq[T] =&gt; Res) : Res = f(as) } implicit def curryN[Out, T, Res, N &lt;: Nat](implicit c : CurryAux[Out, T, Res, N]) = new CurryAux[T =&gt; Out, T, Res, Succ[N]] { def apply(as: Seq[T], f : Seq[T] =&gt; Res) : (T =&gt; Out) = (a: T) =&gt; c(as :+ a, f) } } implicit class CurryHelper[T, Res](f : Seq[T] =&gt; Res) { def curry[N &lt;: Nat](implicit c : Curry[T, Res, N]): c.Out = c(IndexedSeq[T](), f) } </code></pre> <p>Usage:</p> <pre><code>scala&gt; def concat(strs: String*) = strs.mkString concat: (strs: String*)String scala&gt; val test = ( concat _ ).curry[_3] test: String =&gt; (String =&gt; (String =&gt; String)) = &lt;function1&gt; scala&gt; test("1")("2")("3") res0: String = 123 </code></pre> <p>Without shapeless:</p> <pre><code>class CurryHelper[T, Res](f: Seq[T] =&gt; Res, as: Seq[T]) { def myCurry() = this def apply(ts: T*) = new CurryHelper(f, as ++ ts) def apply(ts: Seq[T]) = f(as ++ ts) } implicit def toCurryHelper[T, Res](f: Seq[T] =&gt; Res) = new CurryHelper(f, IndexedSeq[T]()) scala&gt; def concat(strs: String*) = strs.mkString concat: (strs: String*)String scala&gt; val test = ( concat _ ).myCurry test: CurryHelper[String,String] = CurryHelper@4f48ed35 scala&gt; test("1")("2")("3", "4")(Nil) res0: String = 1234 </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload