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