|
Scala example source code file (GenerateTupleW.scala)
The GenerateTupleW.scala Scala example source codeimport sbt._ object GenerateTupleW { def apply(outputDir: File) = { val arities = 2 to 12 def writeFileScalazPackage(fileName: String, source: String): File = { val file = (outputDir / "scalaz" / "syntax" / "std" / fileName).asFile IO.write(file, source) file } def double(s: String) = s + s val tuples: IndexedSeq[(String, String)] = for (arity: Int <- arities) yield { case class N(n: Int) { val alpha: String = ('A' + (n - 1)).toChar.toString val alpha2: String = alpha + alpha val element: String = "_" + n } val ns = (1 to arity) map N.apply def mapMkString(f: N => String): String = ns.map(f).mkString(", ") val tparams = mapMkString { n => n.alpha } val params = mapMkString { n => n.element } val ztparams = mapMkString { _ => "Z" } val mapallTParams = mapMkString { n => n.alpha2 } val mapallParams = mapMkString { n => s"${n.element}: (${n.alpha} => ${n.alpha2}) = identity[${n.alpha}] _" } val mapallApply = mapMkString { n => s"${n.element}(value.${n.element})" } val pimp = s"""| |final class Tuple${arity}Ops[${tparams}](val value: (${tparams})) extends AnyVal { | def fold[Z](f: => (${tparams}) => Z): Z = {import value._; f(${params})} | def toIndexedSeq[Z](implicit ev: value.type <:< Tuple${arity}[${ztparams}]): IndexedSeq[Z] = {val zs = ev(value); import zs._; IndexedSeq(${params})} | def mapElements[${mapallTParams}](${mapallParams}): (${mapallTParams}) = (${mapallApply}) |}""".stripMargin val conv = s"""implicit def ToTuple${arity}Ops[${tparams}](t: (${tparams})): Tuple${arity}Ops[${tparams}] = new Tuple${arity}Ops(t)\n""" (pimp, conv) } val source = "package scalaz\npackage syntax\npackage std\n\nimport collection.immutable.IndexedSeq\n\n" + tuples.map(_._1).mkString("\n") + "\n\ntrait ToTupleOps {\n" + tuples.map(" " + _._2).mkString("\n") + "}" writeFileScalazPackage("TupleOps.scala", source) } } Other Scala examples (source code examples)Here is a short list of links related to this Scala GenerateTupleW.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.