diff --git a/analysis/src/main/scala/org/polystat/odin/analysis/mutualrec/naive/package.scala b/analysis/src/main/scala/org/polystat/odin/analysis/mutualrec/naive/package.scala index b83b0ffe..9e016971 100644 --- a/analysis/src/main/scala/org/polystat/odin/analysis/mutualrec/naive/package.scala +++ b/analysis/src/main/scala/org/polystat/odin/analysis/mutualrec/naive/package.scala @@ -60,12 +60,11 @@ package object naive { // so we try to find it for some self and record this fact in the // method state case EODot(EOSimpleApp(dotLeftName), attrName) - if args - .headOption - .exists(_.expr match { - case EOSimpleApp(firstArgName) => firstArgName == dotLeftName - case _ => false - }) => + if (args.head.expr match { + case EOSimpleApp(firstArgName) => + firstArgName == dotLeftName + case _ => false + }) => for { referencedMethods <- objs.findMethodsWithParamsByName(attrName) _ <- referencedMethods.traverse_ { refMeth => diff --git a/analysis/src/main/scala/org/polystat/odin/analysis/utils/Abstract.scala b/analysis/src/main/scala/org/polystat/odin/analysis/utils/Abstract.scala index c8061413..c1800eea 100644 --- a/analysis/src/main/scala/org/polystat/odin/analysis/utils/Abstract.scala +++ b/analysis/src/main/scala/org/polystat/odin/analysis/utils/Abstract.scala @@ -1,14 +1,11 @@ package org.polystat.odin.analysis.utils import cats.Applicative -import cats.Eval -import cats.Foldable import cats.Id import cats.Monoid -import cats.implicits.catsSyntaxSemigroup -import cats.implicits.toFoldableOps -import cats.implicits.toFunctorOps -import com.github.tarao.nonempty.collection.NonEmpty +import cats.syntax.foldable._ +import cats.syntax.functor._ +import cats.syntax.semigroup._ import higherkindness.droste.data.Fix import org.polystat.odin.core.ast._ import org.polystat.odin.core.ast.astparams.EOExprOnly @@ -17,23 +14,6 @@ import Optics.{lenses, traversals} object Abstract { - private type NonEmptyVector[A] = NonEmpty[A, Vector[A]] - - implicit private val nonEmptyFoldable: Foldable[NonEmptyVector] = - new Foldable[NonEmptyVector] { - - override def foldLeft[A, B](fa: NonEmptyVector[A], b: B)( - f: (B, A) => B - ): B = - fa.value.foldLeft(b)(f) - - override def foldRight[A, B](fa: NonEmptyVector[A], lb: Eval[B])( - f: (A, Eval[B]) => Eval[B] - ): Eval[B] = - f(fa.head, fa.tail.foldRightDefer(lb)(f)) - - } - def modifyExprWithState[F[_]: Applicative, S]( initialState: S, initialDepth: BigInt = 0 @@ -89,7 +69,7 @@ object Abstract { case EOObj(_, _, bndAttrs) => bndAttrs.foldMap(recurse) case EOCopy(trg, args) => recurse(EOAnonExpr(trg)).combine( - Foldable[NonEmptyVector].foldMap(args)(recurse) + args.foldMap(recurse) ) case EODot(trg, _) => recurse(EOAnonExpr(trg)) case EOArray(elems) => elems.foldMap(recurse) diff --git a/analysis/src/main/scala/org/polystat/odin/analysis/utils/Optics.scala b/analysis/src/main/scala/org/polystat/odin/analysis/utils/Optics.scala index 1a9de60f..e897dd8d 100644 --- a/analysis/src/main/scala/org/polystat/odin/analysis/utils/Optics.scala +++ b/analysis/src/main/scala/org/polystat/odin/analysis/utils/Optics.scala @@ -1,17 +1,15 @@ package org.polystat.odin.analysis.utils import cats.Applicative -import cats.implicits.catsSyntaxTuple2Semigroupal -import cats.implicits.toFunctorOps -import cats.implicits.toTraverseOps -import com.github.tarao.nonempty.collection.NonEmpty +import cats.data.NonEmptyVector +import cats.syntax.apply._ +import cats.syntax.functor._ import higherkindness.droste.data.Fix import monocle.Lens import monocle.Optional import monocle.Prism import monocle.Traversal import monocle.macros.GenLens -import org.polystat.odin.analysis.utils.inlining.types.CopyArgs import org.polystat.odin.core.ast._ import org.polystat.odin.core.ast.astparams.EOExprOnly @@ -87,7 +85,7 @@ object Optics { val focusDotSrc: Lens[EODot[EOExprOnly], EOExprOnly] = GenLens[EODot[EOExprOnly]](_.src) - val focusCopyArgs: Lens[EOCopy[EOExprOnly], CopyArgs] = + val focusCopyArgs: Lens[EOCopy[EOExprOnly], NonEmptyVector[EOBnd[EOExprOnly]]] = GenLens[EOCopy[EOExprOnly]](_.args) val focusArrayElems: Lens[EOArray[EOExprOnly], Vector[EOBnd[EOExprOnly]]] = @@ -117,9 +115,9 @@ object Optics { def nonEmptyVectorIndexOptional[A]( i: Int - ): Optional[NonEmpty[A, Vector[A]], A] = - Optional[NonEmpty[A, Vector[A]], A](_.lift(i))(item => - seq => if (seq.isDefinedAt(i)) seq.updated(i, item) else seq + ): Optional[NonEmptyVector[A], A] = + Optional[NonEmptyVector[A], A](_.toVector.lift(i))(item => + nev => nev.updated(i, item).getOrElse(nev) ) def focusBndAttrWithName( @@ -143,7 +141,7 @@ object Optics { i: Int ): Optional[EOCopy[EOExprOnly], EOExprOnly] = Optional[EOCopy[EOExprOnly], EOExprOnly](copy => - copy.args.lift(i).map(_.expr) + copy.args.toVector.lift(i).map(_.expr) )(expr => copy => { lenses @@ -183,19 +181,8 @@ object Optics { object traversals { - def nonEmptyVectorTraversal[A]: Traversal[NonEmpty[A, Vector[A]], A] = - new Traversal[NonEmpty[A, Vector[A]], A] { - - override def modifyA[F[_]: Applicative](f: A => F[A])( - s: NonEmpty[A, Vector[A]] - ): F[NonEmpty[A, Vector[A]]] = { - ( - f(s.head), - s.tail.traverse(f) - ).mapN((head, tail) => NonEmpty[Vector[A]](head, tail: _*)) - } - - } + def nonEmptyVectorTraversal[A]: Traversal[NonEmptyVector[A], A] = + Traversal.fromTraverse val eoProg: Traversal[EOProg[EOExprOnly], EOExprOnly] = new Traversal[EOProg[EOExprOnly], EOExprOnly] { diff --git a/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/Inliner.scala b/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/Inliner.scala index 9a7c6809..07b1707a 100644 --- a/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/Inliner.scala +++ b/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/Inliner.scala @@ -383,7 +383,8 @@ object Inliner { methodInfo: MethodInfo, call: Call, ): EOObj[EOExprOnly] = { - val argMap = methodInfo.body.freeAttrs.map(_.name).zip(call.args).toMap + val argMap = + methodInfo.body.freeAttrs.map(_.name).zip(call.args.toVector).toMap val localNames = methodInfo .body .bndAttrs diff --git a/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/LocateCalls.scala b/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/LocateCalls.scala index bf88a446..ab334346 100644 --- a/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/LocateCalls.scala +++ b/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/LocateCalls.scala @@ -48,13 +48,11 @@ object LocateCalls { Fix(EODot(Fix(EOSimpleAppWithLocator("self", locator)), name)), args ) if locator == depth => - val firstArgIsValid: Boolean = args - .headOption - .exists { - case EOAnonExpr(EOSimpleAppWithLocator("self", locator)) - if locator == depth => true - case _ => false - } + val firstArgIsValid: Boolean = args.head match { + case EOAnonExpr(EOSimpleAppWithLocator("self", locator)) + if locator == depth => true + case _ => false + } if (firstArgIsValid) Vector( inlining.Call( @@ -91,7 +89,7 @@ object LocateCalls { .andThen(prisms.fixToEOCopy) .andThen(lenses.focusCopyTrg), depth = depth - ) ++ args.zipWithIndex.flatMap { case (arg, i) => + ) ++ args.zipWithIndex.toVector.flatMap { case (arg, i) => findCallsRec( subExpr = arg.expr, pathToCallSite = pathToCallSite, diff --git a/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/package.scala b/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/package.scala index 1535008f..06f8c112 100644 --- a/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/package.scala +++ b/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/package.scala @@ -1,6 +1,7 @@ package org.polystat.odin.analysis.utils.inlining import cats.Applicative +import cats.data.NonEmptyVector import cats.syntax.align._ import cats.syntax.apply._ import cats.syntax.foldable._ @@ -10,6 +11,7 @@ import monocle.Optional import org.polystat.odin.analysis.ObjectName import org.polystat.odin.backend.eolang.ToEO.instances._ import org.polystat.odin.backend.eolang.ToEO.ops._ +import org.polystat.odin.core.ast.EOBnd import org.polystat.odin.core.ast.EOBndExpr import org.polystat.odin.core.ast.EONamedBnd import org.polystat.odin.core.ast.EOObj @@ -211,5 +213,5 @@ final case class Call( methodName: String, callSite: PathToCallSite, callLocation: PathToCall, - args: CopyArgs + args: NonEmptyVector[EOBnd[EOExprOnly]] ) diff --git a/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/types.scala b/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/types.scala index 08aa2580..84466a55 100644 --- a/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/types.scala +++ b/analysis/src/main/scala/org/polystat/odin/analysis/utils/inlining/types.scala @@ -1,15 +1,11 @@ package org.polystat.odin.analysis.utils.inlining -import com.github.tarao.nonempty.collection.NonEmpty import monocle.Optional -import org.polystat.odin.core.ast.EOBnd import org.polystat.odin.core.ast.EOObj import org.polystat.odin.core.ast.astparams.EOExprOnly object types { - type CopyArgs = NonEmpty[EOBnd[EOExprOnly], Vector[EOBnd[EOExprOnly]]] - type PathToCallSite = Optional[ EOObj[EOExprOnly], // method body EOObj[EOExprOnly], // call site object diff --git a/analysis/src/main/scala/org/polystat/odin/analysis/utils/logicalextraction/ExtractLogic.scala b/analysis/src/main/scala/org/polystat/odin/analysis/utils/logicalextraction/ExtractLogic.scala index f6462cb6..8d27a21b 100644 --- a/analysis/src/main/scala/org/polystat/odin/analysis/utils/logicalextraction/ExtractLogic.scala +++ b/analysis/src/main/scala/org/polystat/odin/analysis/utils/logicalextraction/ExtractLogic.scala @@ -3,6 +3,7 @@ package org.polystat.odin.analysis.utils.logicalextraction import ap.SimpleAPI import ap.SimpleAPI.FunctionalityMode import cats.data.EitherNel +import cats.data.NonEmptyVector import cats.data.{NonEmptyList => Nel} import cats.syntax.either._ import cats.syntax.traverse._ @@ -129,9 +130,11 @@ object ExtractLogic { ), args ) => - args.value.toList.map(x => Fix.un(x.expr)) match { - case EOSimpleAppWithLocator("self", locator2) :: moreArgs - if locator == locator2 => + args.map(x => Fix.un(x.expr)) match { + case NonEmptyVector( + EOSimpleAppWithLocator("self", locator2), + moreArgs + ) if locator == locator2 => moreArgs .traverse(expr => extractInfo(depth, Fix(expr), availableMethods) @@ -169,13 +172,11 @@ object ExtractLogic { } case EOCopy(Fix(EOSimpleAppWithLocator(name, _)), args) => for { /* * FIXME: check locators */ - infoArgs <- args - .value - .traverse(arg => extractInfo(depth, arg.expr, availableMethods)) - result <- (name, infoArgs.toList) match { - case ("seq", Nil) => - Left(Nel.one("seq is expecting at least one term")) - case ("seq", arg :: Nil) => + infoArgs <- args.traverse(arg => + extractInfo(depth, arg.expr, availableMethods) + ) + result <- (name, infoArgs) match { + case ("seq", NonEmptyVector(arg, Vector())) => Right( Info( List.empty, @@ -190,12 +191,12 @@ object ExtractLogic { List.empty, args.last.exists, args.last.value, - And(args.map(x => x.properties)) + And(args.toVector.map(x => x.properties)) ) ) // Todo if possible check that assert content is a boolean // assert (3.div 2) causes problems with type correspondance - case ("assert", arg :: Nil) => + case ("assert", NonEmptyVector(arg, Vector())) => Right( Info( List.empty, @@ -213,10 +214,10 @@ object ExtractLogic { } yield result case EOCopy(Fix(EODot(src, attr)), args) => for { infoSrc <- extractInfo(depth, src, availableMethods) - infoArgs <- args - .value - .traverse(arg => extractInfo(depth, arg.expr, availableMethods)) - result <- (attr, infoArgs.toList) match { + infoArgs <- args.traverse(arg => + extractInfo(depth, arg.expr, availableMethods) + ) + result <- (attr, infoArgs.toVector.toList) match { case ("add", infoArg :: Nil) => Right( Info( diff --git a/backends/eolang/src/main/scala/org/polystat/odin/backend/eolang/ToEO.scala b/backends/eolang/src/main/scala/org/polystat/odin/backend/eolang/ToEO.scala index 4c3daab0..96244f37 100644 --- a/backends/eolang/src/main/scala/org/polystat/odin/backend/eolang/ToEO.scala +++ b/backends/eolang/src/main/scala/org/polystat/odin/backend/eolang/ToEO.scala @@ -355,7 +355,7 @@ object ToEO { def renderCopySingleLine(copy: EOCopy[EOExprOnly]): Inline = { val trg: String = renderArgSingleLine(EOAnonExpr(copy.trg)) - val args: String = copy.args.map(renderArgSingleLine).mkString(" ") + val args: String = copy.args.map(renderArgSingleLine).mkString_(" ") Inline(List(trg, args).mkString(" ")) } @@ -365,7 +365,7 @@ object ToEO { override def toEO(node: EOCopy[EOExprOnly]): InlineOrLines = { val outerArgsString = - node.args.flatMap(_.toEO.toIterable).map(indent) + node.args.toVector.flatMap(_.toEO.toIterable).map(indent) Fix.un(node.trg) match { case EOObj(_, _, _) => renderCopySingleLine(node) @@ -408,7 +408,7 @@ object ToEO { new ToEO[EOBytesData[EOExprOnly], Inline] { override def toEO(node: EOBytesData[EOExprOnly]): Inline = - Inline(node.bytes.map(_.toEO).mkString("-")) + Inline(node.bytes.map(_.toEO).mkString_("-")) } diff --git a/backends/eolang/src/main/scala/org/polystat/odin/backend/eolang/inlineorlines.scala b/backends/eolang/src/main/scala/org/polystat/odin/backend/eolang/inlineorlines.scala index db0bd018..2d9b5457 100644 --- a/backends/eolang/src/main/scala/org/polystat/odin/backend/eolang/inlineorlines.scala +++ b/backends/eolang/src/main/scala/org/polystat/odin/backend/eolang/inlineorlines.scala @@ -1,10 +1,21 @@ package org.polystat.odin.backend.eolang +import cats.Show + object inlineorlines { type InlineOrLines = Either[String, Iterable[String]] type Inline = Left[String, Iterable[String]] + implicit val inlineShow: Show[Inline] = new Show[Inline] { + + override def show(t: Inline): String = { + val Left(s) = t + s + } + + } + val Inline: String => Left[String, Iterable[String]] = Left[String, Iterable[String]] diff --git a/core/src/main/scala/org/polystat/odin/core/ast/ast.scala b/core/src/main/scala/org/polystat/odin/core/ast/ast.scala index 5f58e3ed..145101e6 100644 --- a/core/src/main/scala/org/polystat/odin/core/ast/ast.scala +++ b/core/src/main/scala/org/polystat/odin/core/ast/ast.scala @@ -1,7 +1,7 @@ package org.polystat.odin.core.ast import cats.data.NonEmptyList -import com.github.tarao.nonempty.collection.NonEmpty +import cats.data.NonEmptyVector import scala.util.matching.Regex @@ -93,7 +93,7 @@ sealed case class EODot[+A](src: A, name: String) extends EOApp[A] sealed case class EOCopy[+A]( trg: A, - args: NonEmpty[EOBnd[A], Vector[EOBnd[A]]] + args: NonEmptyVector[EOBnd[A]] ) extends EOApp[A] // / Data //////////////////////////////////////////////////////////////////// @@ -102,7 +102,7 @@ sealed trait EOData[+A] extends EOExpr[A] sealed case class EOSingleByte(byte: Byte) sealed case class EOBytesData[+A]( - bytes: NonEmpty[EOSingleByte, Vector[EOSingleByte]] + bytes: NonEmptyVector[EOSingleByte] ) extends EOData[A] sealed case class EOStrData[+A](str: String) extends EOData[A] diff --git a/parser/src/main/scala/org/polystat/odin/parser/Utils.scala b/parser/src/main/scala/org/polystat/odin/parser/Utils.scala index f662c64e..c688ecd3 100644 --- a/parser/src/main/scala/org/polystat/odin/parser/Utils.scala +++ b/parser/src/main/scala/org/polystat/odin/parser/Utils.scala @@ -1,6 +1,6 @@ package org.polystat.odin.parser -import com.github.tarao.nonempty.collection.NonEmpty +import cats.data.NonEmptyVector import higherkindness.droste.data.Fix import org.polystat.odin.core.ast._ import org.polystat.odin.core.ast.astparams.EOExprOnly @@ -8,9 +8,9 @@ import org.polystat.odin.core.ast.astparams.EOExprOnly private[parser] object Utils { def createArrayFromNonEmpty( - ne: Option[NonEmpty[EOBnd[EOExprOnly], Vector[EOBnd[EOExprOnly]]]] + ne: Option[NonEmptyVector[EOBnd[EOExprOnly]]] ): EOExprOnly = Fix[EOExpr]( - EOArray(ne.map(_.value).getOrElse(Vector.empty[EOBnd[EOExprOnly]])) + EOArray(ne.map(_.toVector).getOrElse(Vector.empty[EOBnd[EOExprOnly]])) ) private def extractEOExpr(bnd: EOBnd[EOExprOnly]): EOExprOnly = { @@ -24,11 +24,11 @@ private[parser] object Utils { // about names of bindings is not lost def createInverseDot( id: String, - args: Vector[EOBnd[EOExprOnly]] + args: NonEmptyVector[EOBnd[EOExprOnly]] ): EOExprOnly = Fix[EOExpr]( - NonEmpty - .from(args.tail) + NonEmptyVector + .fromVector(args.tail) .map { tail => EOCopy( Fix[EOExpr](EODot(extractEOExpr(args.head), id)), diff --git a/parser/src/main/scala/org/polystat/odin/parser/eo/Common.scala b/parser/src/main/scala/org/polystat/odin/parser/eo/Common.scala index 41035de7..67bc7735 100644 --- a/parser/src/main/scala/org/polystat/odin/parser/eo/Common.scala +++ b/parser/src/main/scala/org/polystat/odin/parser/eo/Common.scala @@ -1,7 +1,7 @@ package org.polystat.odin.parser.eo +import cats.data.NonEmptyVector import cats.parse.{Parser => P} -import com.github.tarao.nonempty.collection.NonEmpty import org.polystat.odin.core.ast.EOBnd import org.polystat.odin.core.ast.EOBndExpr import org.polystat.odin.core.ast.astparams.EOExprOnly @@ -39,12 +39,12 @@ object Common { def verticalApplicationArgs( indent: Int, indentationStep: Int - ): P[NonEmpty[EOBnd[EOExprOnly], Vector[EOBnd[EOExprOnly]]]] = P.defer( + ): P[NonEmptyVector[EOBnd[EOExprOnly]]] = P.defer( wspBetweenObjs(indent, indentationStep) *> Parser .`object`(indent + indentationStep, indentationStep) .repSep(1, wspBetweenObjs(indent, indentationStep)) - .mapFilter(objs => NonEmpty.from(objs.toList.toVector)) + .mapFilter(objs => NonEmptyVector.fromVector(objs.toList.toVector)) ) } diff --git a/parser/src/main/scala/org/polystat/odin/parser/eo/Named.scala b/parser/src/main/scala/org/polystat/odin/parser/eo/Named.scala index 39b2877d..2987e4f9 100644 --- a/parser/src/main/scala/org/polystat/odin/parser/eo/Named.scala +++ b/parser/src/main/scala/org/polystat/odin/parser/eo/Named.scala @@ -1,7 +1,6 @@ package org.polystat.odin.parser.eo import cats.parse.{Parser => P} -import com.github.tarao.nonempty.collection.NonEmpty import higherkindness.droste.data.Fix import org.polystat.odin.core.ast._ import org.polystat.odin.core.ast.astparams.EOExprOnly @@ -12,8 +11,6 @@ import org.polystat.odin.parser.eo.Tokens._ object Named { - type ApplicationArgs = NonEmpty[EOBnd[EOExprOnly], Vector[EOBnd[EOExprOnly]]] - def `object`( indent: Int, indentationStep: Int diff --git a/parser/src/main/scala/org/polystat/odin/parser/eo/SingleLine.scala b/parser/src/main/scala/org/polystat/odin/parser/eo/SingleLine.scala index 9037f5d1..975b6b9c 100644 --- a/parser/src/main/scala/org/polystat/odin/parser/eo/SingleLine.scala +++ b/parser/src/main/scala/org/polystat/odin/parser/eo/SingleLine.scala @@ -1,7 +1,6 @@ package org.polystat.odin.parser.eo import cats.parse.{Parser => P} -import com.github.tarao.nonempty.collection.NonEmpty import higherkindness.droste.data.Fix import org.polystat.odin.core.ast._ import org.polystat.odin.core.ast.astparams.EOExprOnly @@ -105,10 +104,7 @@ object SingleLine { (applicationTarget.backtrack.map(EOAnonExpr(_)) | singleLineBndExpr) .repSep(1, wsp) ).map { case (trg, args) => - NonEmpty - .from(args.toList) - .map(args => Fix[EOExpr](EOCopy(trg, args.toVector))) - .getOrElse(trg) + Fix(EOCopy(trg, args.toNev)) } val singleLineArray: P[EOExprOnly] = ( diff --git a/parser/src/main/scala/org/polystat/odin/parser/xmir/XmirToAst.scala b/parser/src/main/scala/org/polystat/odin/parser/xmir/XmirToAst.scala index b04884f5..d2beec5a 100644 --- a/parser/src/main/scala/org/polystat/odin/parser/xmir/XmirToAst.scala +++ b/parser/src/main/scala/org/polystat/odin/parser/xmir/XmirToAst.scala @@ -1,8 +1,8 @@ package org.polystat.odin.parser.xmir +import cats.data.NonEmptyVector import cats.effect.Sync import cats.syntax.all._ -import com.github.tarao.nonempty.collection.NonEmpty import higherkindness.droste.data.Fix import org.polystat.odin.core.ast._ import org.polystat.odin.core.ast.astparams.EOExprOnly @@ -223,7 +223,7 @@ object XmirToAst { eitherWith <- parsedWith combineWith = combineErrors(eitherWith.toSeq) wth <- combineWith - } yield NonEmpty.from(wth.toVector) match { + } yield NonEmptyVector.fromVector(wth.toVector) match { case Some(value) => (name, Fix[EOExpr](EOCopy(trg, value.map(bndFromTuple)))) case None => (name, trg) diff --git a/parser/src/test/scala/org/polystat/odin/parser/TestUtils.scala b/parser/src/test/scala/org/polystat/odin/parser/TestUtils.scala index 11e16360..6767c4ca 100644 --- a/parser/src/test/scala/org/polystat/odin/parser/TestUtils.scala +++ b/parser/src/test/scala/org/polystat/odin/parser/TestUtils.scala @@ -1,6 +1,5 @@ package org.polystat.odin.parser -import com.github.tarao.nonempty.collection.NonEmpty import pprint.PPrinter import java.nio.file.Files @@ -16,14 +15,8 @@ object TestUtils { ) val astPrinter: PPrinter = pprint.copy( - additionalHandlers = { - case nonEmpty: NonEmpty[_, _] => pprint - .treeify( - x = nonEmpty.value, - escapeUnicode = false, - showFieldNames = true - ) - case s: String => pprint.Tree.Literal(s) + additionalHandlers = { case s: String => + pprint.Tree.Literal(s) } ) diff --git a/parser/src/test/scala/org/polystat/odin/parser/ast_tests/FullProgramExamples.scala b/parser/src/test/scala/org/polystat/odin/parser/ast_tests/FullProgramExamples.scala index 55e3596b..8b08c27c 100644 --- a/parser/src/test/scala/org/polystat/odin/parser/ast_tests/FullProgramExamples.scala +++ b/parser/src/test/scala/org/polystat/odin/parser/ast_tests/FullProgramExamples.scala @@ -1,7 +1,7 @@ package org.polystat.odin.parser.ast_tests import cats.data.NonEmptyList -import com.github.tarao.nonempty.collection.NonEmpty +import cats.data.NonEmptyVector import higherkindness.droste.data.Fix import org.polystat.odin.core.ast._ import org.polystat.odin.core.ast.astparams.EOExprOnly @@ -33,7 +33,7 @@ object FullProgramExamples { src = Fix( EOCopy( trg = Fix(EOSimpleApp[EOExprOnly]("dir")), - NonEmpty[Vector[EOBnd[EOExprOnly]]]( + NonEmptyVector.of( EOAnonExpr(Fix(EOStrData[EOExprOnly]("/tmp"))) ) ) @@ -41,7 +41,7 @@ object FullProgramExamples { name = "walk" ) ), - args = NonEmpty[Vector[EOBnd[EOExprOnly]]]( + args = NonEmptyVector.of( EOAnonExpr( Fix( EOArray( @@ -180,7 +180,7 @@ object FullProgramExamples { "write" ) ), - NonEmpty[Vector[EOBnd[EOExprOnly]]]( + NonEmptyVector.of( EOAnonExpr(Fix[EOExpr](EOSimpleApp("v"))) ) ) @@ -204,7 +204,7 @@ object FullProgramExamples { Fix[EOExpr]( EODot(Fix[EOExpr](EOSimpleApp("self")), "f") ), - NonEmpty[Vector[EOBnd[EOExprOnly]]]( + NonEmptyVector.of( EOAnonExpr( Fix[EOExpr](EOSimpleApp("self")) ), @@ -243,7 +243,7 @@ object FullProgramExamples { Fix[EOExpr]( EODot(Fix[EOExpr](EOSimpleApp("self")), "g") ), - NonEmpty[Vector[EOBnd[EOExprOnly]]]( + NonEmptyVector.of( EOAnonExpr( Fix[EOExpr](EOSimpleApp("self")) ), diff --git a/parser/src/test/scala/org/polystat/odin/parser/ast_tests/SingleLineExamples.scala b/parser/src/test/scala/org/polystat/odin/parser/ast_tests/SingleLineExamples.scala index bedca5ee..e5e2b7f4 100644 --- a/parser/src/test/scala/org/polystat/odin/parser/ast_tests/SingleLineExamples.scala +++ b/parser/src/test/scala/org/polystat/odin/parser/ast_tests/SingleLineExamples.scala @@ -1,6 +1,6 @@ package org.polystat.odin.parser.ast_tests -import com.github.tarao.nonempty.collection.NonEmpty +import cats.data.NonEmptyVector import higherkindness.droste.data.Fix import org.polystat.odin.core.ast._ import org.polystat.odin.core.ast.astparams.EOExprOnly @@ -37,7 +37,7 @@ object SingleLineExamples { name = "add" ) ), - args = NonEmpty[Vector[EOBnd[EOExprOnly]]]( + args = NonEmptyVector.of( EOAnonExpr(Fix(EOIntData[EOExprOnly](1))) ) ) @@ -53,7 +53,7 @@ object SingleLineExamples { name = "sub" ) ), - args = NonEmpty[Vector[EOBnd[EOExprOnly]]]( + args = NonEmptyVector.of( EOAnonExpr(Fix(EOIntData[EOExprOnly](1))) ) ) @@ -78,7 +78,7 @@ object SingleLineExamples { Fix[EOExpr]( EOCopy( Fix[EOExpr](EOSimpleApp("a")), - NonEmpty[Vector[EOBnd[EOExprOnly]]]( + NonEmptyVector.of( EOAnonExpr(Fix[EOExpr](EOSimpleApp("b"))), EOAnonExpr(Fix[EOExpr](EOSimpleApp("c"))), EOAnonExpr(Fix[EOExpr](EOSimpleApp("d"))) @@ -95,17 +95,17 @@ object SingleLineExamples { Fix[EOExpr]( EOCopy( Fix[EOExpr](EOSimpleApp("a")), - NonEmpty[Vector[EOBnd[EOExprOnly]]]( + NonEmptyVector.of( EOAnonExpr( Fix[EOExpr]( EOCopy( Fix[EOExpr](EOSimpleApp("b")), - NonEmpty[Vector[EOBnd[EOExprOnly]]]( + NonEmptyVector.of( EOAnonExpr( Fix[EOExpr]( EOCopy( Fix[EOExpr](EOSimpleApp("c")), - NonEmpty[Vector[EOBnd[EOExprOnly]]]( + NonEmptyVector.of( EOAnonExpr(Fix[EOExpr](EOSimpleApp("d"))) ) ) @@ -132,17 +132,17 @@ object SingleLineExamples { Fix[EOExpr]( EOCopy( Fix[EOExpr](EOSimpleApp("a")), - NonEmpty[Vector[EOBnd[EOExprOnly]]]( + NonEmptyVector.of( EOAnonExpr(Fix[EOExpr](EOSimpleApp("b"))) ) ) ), - NonEmpty[Vector[EOBnd[EOExprOnly]]]( + NonEmptyVector.of( EOAnonExpr(Fix[EOExpr](EOSimpleApp("c"))) ) ) ), - NonEmpty[Vector[EOBnd[EOExprOnly]]]( + NonEmptyVector.of( EOAnonExpr(Fix[EOExpr](EOSimpleApp("d"))) ) ) diff --git a/parser/src/test/scala/org/polystat/odin/parser/gens/ast.scala b/parser/src/test/scala/org/polystat/odin/parser/gens/ast.scala index 7f00d943..65012a62 100644 --- a/parser/src/test/scala/org/polystat/odin/parser/gens/ast.scala +++ b/parser/src/test/scala/org/polystat/odin/parser/gens/ast.scala @@ -1,6 +1,6 @@ package org.polystat.odin.parser.gens -import com.github.tarao.nonempty.collection.NonEmpty +import cats.data.NonEmptyVector import higherkindness.droste.data.Fix import org.polystat.odin.core.ast._ import org.polystat.odin.core.ast.astparams._ @@ -141,12 +141,10 @@ object ast { ) ) .flatMap(lst => - NonEmpty.from(lst.toVector) match { + NonEmptyVector.fromVector(lst.toVector) match { case Some(value) => Gen.const(value) case None => - anonExpr(maxDepth, depth + 1).map(it => - NonEmpty[Vector[EOBnd[EOExprOnly]]](it) - ) + anonExpr(maxDepth, depth + 1).map(it => NonEmptyVector.one(it)) } ) } yield EOCopy(trg, args) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index c8adc1aa..46235099 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -9,7 +9,6 @@ object Dependencies { val catsParse = "0.3.6" val scalaTest = "3.2.9" val scalaCheck = "3.2.9.0" - val nonEmpty = "0.2.0" val monocle = "3.1.0" val droste = "0.8.0" val pprint = "0.7.1" @@ -20,6 +19,7 @@ object Dependencies { val catsEffectScalatest = "1.4.0" val smtlib = "0.2.1-42-gc68dbaa" val princess = "2021-11-15" + val xml = "2.1.0" } val cats = Seq( @@ -38,8 +38,8 @@ object Dependencies { "org.scalatestplus" %% "scalacheck-1-15" % V.scalaCheck % Test, ) - val nonEmpty = Seq( - "com.github.tarao" %% "nonempty" % V.nonEmpty, + val xml = Seq( + "org.scala-lang.modules" %% "scala-xml" % "2.1.0" ) val monocle = Seq( @@ -82,7 +82,7 @@ object Dependencies { val allCats: Seq[ModuleID] = cats ++ catsEffect - val common: Seq[ModuleID] = allCats ++ scalaTest ++ nonEmpty ++ monocle ++ + val common: Seq[ModuleID] = allCats ++ scalaTest ++ monocle ++ newTypes val analysis: Seq[ModuleID] = common ++ smtlib ++ pprint @@ -92,6 +92,7 @@ object Dependencies { val core: Seq[ModuleID] = common ++ droste ++ fs2 val parser: Seq[ModuleID] = common ++ + xml ++ pprint ++ catsParse ++ eoParser diff --git a/sandbox/src/main/scala/org/polystat/odin/sandbox/programs.scala b/sandbox/src/main/scala/org/polystat/odin/sandbox/programs.scala index 37e01778..d6b8454f 100644 --- a/sandbox/src/main/scala/org/polystat/odin/sandbox/programs.scala +++ b/sandbox/src/main/scala/org/polystat/odin/sandbox/programs.scala @@ -1,7 +1,7 @@ package org.polystat.odin.sandbox +import cats.data.NonEmptyVector import cats.data.NonEmptyList -import com.github.tarao.nonempty.collection.NonEmpty import higherkindness.droste.data.Fix import org.polystat.odin.core.ast.astparams.EOExprOnly import org.polystat.odin.core.ast._ @@ -48,7 +48,7 @@ object programs { Fix[EOExpr]( EODot(Fix[EOExpr](EOSimpleApp("x")), "write") ), - NonEmpty[Vector[EOBnd[EOExprOnly]]]( + NonEmptyVector.of( EOAnonExpr(Fix[EOExpr](EOSimpleApp("v"))) ) ) @@ -72,7 +72,7 @@ object programs { Fix[EOExpr]( EODot(Fix[EOExpr](EOSimpleApp("self")), "f") ), - NonEmpty[Vector[EOBnd[EOExprOnly]]]( + NonEmptyVector.of( EOAnonExpr(Fix[EOExpr](EOSimpleApp("self"))), EOAnonExpr(Fix[EOExpr](EOSimpleApp("v"))) ) @@ -109,7 +109,7 @@ object programs { Fix[EOExpr]( EODot(Fix[EOExpr](EOSimpleApp("self")), "g") ), - NonEmpty[Vector[EOBnd[EOExprOnly]]]( + NonEmptyVector.of( EOAnonExpr(Fix[EOExpr](EOSimpleApp("self"))), EOAnonExpr(Fix[EOExpr](EOSimpleApp("v"))) )