summaryrefslogtreecommitdiff
path: root/build.sbt
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2017-10-16 20:42:37 -0700
committerLi Haoyi <haoyi.sg@gmail.com>2017-10-16 20:42:37 -0700
commitcb05d5a1df3d4b7f89ecf0d95d8b9fe0dc40ae3a (patch)
treee1032e6c7067726df9ddb821acaa6168943d93a7 /build.sbt
parent191591f8ca8b577807aeabd4d065f293afcca1ec (diff)
downloadmill-cb05d5a1df3d4b7f89ecf0d95d8b9fe0dc40ae3a.tar.gz
mill-cb05d5a1df3d4b7f89ecf0d95d8b9fe0dc40ae3a.tar.bz2
mill-cb05d5a1df3d4b7f89ecf0d95d8b9fe0dc40ae3a.zip
Fleshed out basic implementations
Diffstat (limited to 'build.sbt')
-rw-r--r--build.sbt33
1 files changed, 33 insertions, 0 deletions
diff --git a/build.sbt b/build.sbt
index 6836cb4f..6d412fc5 100644
--- a/build.sbt
+++ b/build.sbt
@@ -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