diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2017-10-16 20:42:37 -0700 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2017-10-16 20:42:37 -0700 |
commit | cb05d5a1df3d4b7f89ecf0d95d8b9fe0dc40ae3a (patch) | |
tree | e1032e6c7067726df9ddb821acaa6168943d93a7 /build.sbt | |
parent | 191591f8ca8b577807aeabd4d065f293afcca1ec (diff) | |
download | mill-cb05d5a1df3d4b7f89ecf0d95d8b9fe0dc40ae3a.tar.gz mill-cb05d5a1df3d4b7f89ecf0d95d8b9fe0dc40ae3a.tar.bz2 mill-cb05d5a1df3d4b7f89ecf0d95d8b9fe0dc40ae3a.zip |
Fleshed out basic implementations
Diffstat (limited to 'build.sbt')
-rw-r--r-- | build.sbt | 33 |
1 files changed, 33 insertions, 0 deletions
@@ -3,3 +3,36 @@ scalaVersion := "2.12.3" name := "hbt" organization := "com.lihaoyi" + + +libraryDependencies += "com.lihaoyi" %% "sourcecode" % "0.1.4" + +sourceGenerators in Compile += Def.task { + val dir = (sourceManaged in Compile).value + val file = dir/"fasterparser"/"SequencerGen.scala" + // Only go up to 21, because adding the last element makes it 22 + val tuples = (2 to 21).map{ i => + val ts = (1 to i) map ("T" + _) + val chunks = (1 to i) map { n => + s"t._$n" + } + val tsD = (ts :+ "D").mkString(",") + s""" + implicit def Sequencer$i[$tsD]: Sequencer[(${ts.mkString(", ")}), D, ($tsD)] = + Sequencer0((t, d) => (${chunks.mkString(", ")}, d)) + """ + } + val output = s""" + package hbt + trait SequencerGen[Sequencer[_, _, _]] extends LowestPriSequencer[Sequencer]{ + protected[this] def Sequencer0[A, B, C](f: (A, B) => C): Sequencer[A, B, C] + ${tuples.mkString("\n")} + } + trait LowestPriSequencer[Sequencer[_, _, _]]{ + protected[this] def Sequencer0[A, B, C](f: (A, B) => C): Sequencer[A, B, C] + implicit def Sequencer1[T1, T2]: Sequencer[T1, T2, (T1, T2)] = Sequencer0{case (t1, t2) => (t1, t2)} + } + """.stripMargin + IO.write(file, output) + Seq(file) +}
\ No newline at end of file |