mirror of
https://github.com/mcanlas/6502-opcodes.git
synced 2024-06-26 01:29:31 +00:00
fmt
This commit is contained in:
parent
c3559ccbee
commit
eb97842353
|
@ -3,20 +3,34 @@ package com.htmlism.scratchpad
|
|||
import cats.Semigroup
|
||||
import cats.syntax.all._
|
||||
|
||||
case class AsmProgram[A : Reg, MA <: MutationStatus, Z : Semigroup](a: StatefulRegister[A, MA], z: Z):
|
||||
case class AsmProgram[A: Reg, MA <: MutationStatus, Z: Semigroup](a: StatefulRegister[A, MA], z: Z):
|
||||
def map(f: StatefulRegister[A, MA] => Z): AsmProgram[A, MA, Z] =
|
||||
AsmProgram(a, z |+| f(a))
|
||||
|
||||
def widen[B : Reg]: AsmProgram2[A, MA, B, Unknown, Z] =
|
||||
def widen[B: Reg]: AsmProgram2[A, MA, B, Unknown, Z] =
|
||||
AsmProgram2(a, ??? : StatefulRegister[B, Unknown], z)
|
||||
|
||||
case class AsmProgram2[A : Reg, MA <: MutationStatus, B : Reg, MB <: MutationStatus, Z : Semigroup](a: StatefulRegister[A, MA], b: StatefulRegister[B, MB], z: Z):
|
||||
case class AsmProgram2[A: Reg, MA <: MutationStatus, B: Reg, MB <: MutationStatus, Z: Semigroup](
|
||||
a: StatefulRegister[A, MA],
|
||||
b: StatefulRegister[B, MB],
|
||||
z: Z
|
||||
):
|
||||
def map(f: (StatefulRegister[A, MA], StatefulRegister[B, MB]) => Z): AsmProgram2[A, MA, B, MB, Z] =
|
||||
AsmProgram2(a, b, z |+| f(a, b))
|
||||
|
||||
def widen[C : Reg]: AsmProgram3[A, MA, B, MB, C, Unknown, Z] =
|
||||
def widen[C: Reg]: AsmProgram3[A, MA, B, MB, C, Unknown, Z] =
|
||||
AsmProgram3(a, b, ??? : StatefulRegister[C, Unknown], z)
|
||||
|
||||
case class AsmProgram3[A : Reg, MA <: MutationStatus, B : Reg, MB <: MutationStatus, C : Reg, MC <: MutationStatus, Z : Semigroup](a: StatefulRegister[A, MA], b: StatefulRegister[B, MB], c: StatefulRegister[C, MC], z: Z):
|
||||
def map(f: (StatefulRegister[A, MA], StatefulRegister[B, MB], StatefulRegister[C, MC]) => Z): AsmProgram3[A, MA, B, MB, C, MC, Z] =
|
||||
case class AsmProgram3[
|
||||
A: Reg,
|
||||
MA <: MutationStatus,
|
||||
B: Reg,
|
||||
MB <: MutationStatus,
|
||||
C: Reg,
|
||||
MC <: MutationStatus,
|
||||
Z: Semigroup
|
||||
](a: StatefulRegister[A, MA], b: StatefulRegister[B, MB], c: StatefulRegister[C, MC], z: Z):
|
||||
def map(
|
||||
f: (StatefulRegister[A, MA], StatefulRegister[B, MB], StatefulRegister[C, MC]) => Z
|
||||
): AsmProgram3[A, MA, B, MB, C, MC, Z] =
|
||||
AsmProgram3(a, b, c, z |+| f(a, b, c))
|
||||
|
|
|
@ -13,22 +13,25 @@ object Generator extends App:
|
|||
allLetters.take(n)
|
||||
|
||||
val typeParametersLong =
|
||||
letters.flatMap { s =>
|
||||
List(s"$s : Reg", s"M$s <: MutationStatus")
|
||||
}
|
||||
.appended("Z : Monoid")
|
||||
.mkString(", ")
|
||||
letters
|
||||
.flatMap { s =>
|
||||
List(s"$s : Reg", s"M$s <: MutationStatus")
|
||||
}
|
||||
.appended("Z : Monoid")
|
||||
.mkString(", ")
|
||||
|
||||
val typeParametersShort =
|
||||
letters.flatMap { s =>
|
||||
List(s"$s", s"M$s")
|
||||
}
|
||||
letters
|
||||
.flatMap { s =>
|
||||
List(s"$s", s"M$s")
|
||||
}
|
||||
.mkString(", ")
|
||||
|
||||
val parameters =
|
||||
letters.map { s =>
|
||||
s"${s.toLowerCase}: StatefulRegister[$s, M$s]"
|
||||
}
|
||||
letters
|
||||
.map { s =>
|
||||
s"${s.toLowerCase}: StatefulRegister[$s, M$s]"
|
||||
}
|
||||
.appended("z: Z")
|
||||
.mkString(", ")
|
||||
|
||||
|
@ -37,10 +40,11 @@ object Generator extends App:
|
|||
|
||||
val functionArgs =
|
||||
val base =
|
||||
letters.map { s =>
|
||||
s"StatefulRegister[$s, M$s]"
|
||||
}
|
||||
.mkString(", ")
|
||||
letters
|
||||
.map { s =>
|
||||
s"StatefulRegister[$s, M$s]"
|
||||
}
|
||||
.mkString(", ")
|
||||
|
||||
if (n == 1) base else s"($base)"
|
||||
|
||||
|
@ -53,7 +57,9 @@ object Generator extends App:
|
|||
allLetters(n)
|
||||
|
||||
println(s"case class AsmProgram$classNum[$typeParametersLong]($parameters):")
|
||||
println(s" def andThen(that: AsmProgram$classNum[$typeParametersShort, Z]): AsmProgram$classNum[$typeParametersShort, Z] =")
|
||||
println(
|
||||
s" def andThen(that: AsmProgram$classNum[$typeParametersShort, Z]): AsmProgram$classNum[$typeParametersShort, Z] ="
|
||||
)
|
||||
println(s" AsmProgram$classNum($arguments, z |+| that.z)")
|
||||
println()
|
||||
println(s" def widen[$newLetter : Reg]: AsmProgram$nPlus[$typeParametersShort, $newLetter, Unknown, Z] =")
|
||||
|
@ -63,5 +69,7 @@ object Generator extends App:
|
|||
println(s" SubRoutine$classNum(s, this)")
|
||||
println()
|
||||
|
||||
println(s"case class SubRoutine$classNum[$typeParametersLong](name: String, program: AsmProgram$classNum[$typeParametersShort, Z])")
|
||||
println(
|
||||
s"case class SubRoutine$classNum[$typeParametersLong](name: String, program: AsmProgram$classNum[$typeParametersShort, Z])"
|
||||
)
|
||||
println()
|
||||
|
|
|
@ -9,16 +9,16 @@ trait Read[A]
|
|||
|
||||
object Read:
|
||||
implicit val readLease: Lease[Read] =
|
||||
new Lease { }
|
||||
new Lease {}
|
||||
|
||||
trait Write[A]
|
||||
|
||||
object Write:
|
||||
implicit val writeLease: Lease[Write] =
|
||||
new Lease { }
|
||||
new Lease {}
|
||||
|
||||
object ScratchPad:
|
||||
def reg[A : Reg]: PartialUsing[A] =
|
||||
def reg[A: Reg]: PartialUsing[A] =
|
||||
new PartialUsing[A]
|
||||
|
||||
class PartialUsing[A](using a: Reg[A]):
|
||||
|
@ -41,10 +41,10 @@ object ScratchPad:
|
|||
lazy val startY =
|
||||
??? : StatefulRegister[RegisterY, Unknown]
|
||||
|
||||
(AsmProgram(startA, "") : AsmProgram[Accumulator, Unknown, String])
|
||||
(AsmProgram(startA, ""): AsmProgram[Accumulator, Unknown, String])
|
||||
|
||||
(AsmProgram(startA, "")
|
||||
.widen[RegisterX] : AsmProgram2[Accumulator, Unknown, RegisterX, Unknown, String])
|
||||
.widen[RegisterX]: AsmProgram2[Accumulator, Unknown, RegisterX, Unknown, String])
|
||||
|
||||
//
|
||||
// case class Subroutine2[A, B](name: String, f: (Lease[A], Lease[B]) => State2[A, B]) {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
package com.htmlism.scratchpad
|
||||
|
||||
|
||||
trait StatefulRegister[A : Reg, F <: MutationStatus]
|
||||
trait StatefulRegister[A: Reg, F <: MutationStatus]
|
||||
|
|
Loading…
Reference in New Issue
Block a user