dc10.scala.predef.namespace.Packages.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dc10-scala_3 Show documentation
Show all versions of dc10-scala_3 Show documentation
A definitional compiler for generating Scala code.
package dc10.scala.predef.namespace
import cats.implicits.*
import cats.data.StateT
import dc10.scala.{Statement, ScalaFile, Symbol}
import dc10.scala.ctx.{ErrorF, ext}
import java.nio.file.Path
import org.tpolecat.sourcepos.SourcePos
trait Packages[F[_]]:
def PACKAGE[A](nme: String, files: F[A])(using sp: SourcePos): F[A]
object Packages:
trait Mixins extends Packages[
[A] =>> StateT[ErrorF, List[ScalaFile], A],
]:
def PACKAGE[A](nme: String, files: StateT[ErrorF, List[ScalaFile], A])(using sp: SourcePos): StateT[ErrorF, List[ScalaFile], A] =
for
(ms, a) <- StateT.liftF[ErrorF, List[ScalaFile], (List[ScalaFile], A)](files.runEmpty)
ss = ms.map(s => s.copy(
path = Path.of(nme).resolve(s.path),
contents = List[Statement](Statement.PackageDef(Symbol.Package.Basic(nme, Statement.PackageDef(Symbol.Package.Empty(s.contents), 0)), 0))
))
_ <- ss.traverse(d => StateT.modifyF[ErrorF, List[ScalaFile]](ctx => ctx.ext(d)))
yield a
© 2015 - 2025 Weber Informatics LLC | Privacy Policy