remove Composite and replace it with type lambda

This commit is contained in:
Adrien Piquerez 2024-02-07 10:58:05 +01:00
parent cf3c9bbf0d
commit 10fc5da8b6
4 changed files with 8 additions and 26 deletions

View File

@ -12,7 +12,6 @@ import sbt.internal.util.appmacro.{ Convert, ContextUtil }
import sbt.internal.util.complete.Parser
import Def.Initialize
import sbt.util.Applicative
import sbt.internal.util.Types.Compose
import scala.quoted.*
class InputInitConvert[C <: Quotes & scala.Singleton](override val qctx: C, valStart: Int)
@ -94,7 +93,7 @@ class FullConvert[C <: Quotes & scala.Singleton](override val qctx: C, valStart:
}
Converted.success(t.asTerm)
def appExpr: Expr[Applicative[Compose[Initialize, Task]]] =
def appExpr: Expr[Applicative[[a] =>> Initialize[Task[a]]]] =
'{ FullInstance.initializeTaskMonad }
end FullConvert

View File

@ -10,7 +10,7 @@ package std
import Def.Initialize
import sbt.util.{ Applicative, Monad }
import sbt.internal.util.Types.{ const, Compose }
import sbt.internal.util.Types.const
import sbt.internal.util.complete.{ DefaultParsers, Parser }
object InitializeInstance:
@ -28,8 +28,8 @@ end InitializeInstance
private[std] object ComposeInstance:
import InitializeInstance.initializeMonad
val InitInstance = summon[Applicative[Initialize]]
val F1F2: Applicative[Compose[Initialize, Task]] =
summon[Applicative[Compose[Initialize, Task]]]
val F1F2: Applicative[[a] =>> Initialize[Task[a]]] =
summon[Applicative[[a] =>> Initialize[Task[a]]]]
end ComposeInstance
object ParserInstance:
@ -60,8 +60,8 @@ object FullInstance:
)
given Monad[Initialize] = InitializeInstance.initializeMonad
val F1F2: Applicative[Compose[Initialize, Task]] = ComposeInstance.F1F2
given initializeTaskMonad: Monad[Compose[Initialize, Task]] with
val F1F2: Applicative[[a] =>> Initialize[Task[a]]] = ComposeInstance.F1F2
given initializeTaskMonad: Monad[[a] =>> Initialize[Task[a]]] with
type F[x] = Initialize[Task[x]]
override def pure[A1](x: () => A1): Initialize[Task[A1]] = F1F2.pure(x)
override def ap[A1, A2](ff: Initialize[Task[A1 => A2]])(

View File

@ -11,15 +11,6 @@ trait TypeFunctions:
type Id[X] = X
type NothingK[X] = Nothing
/*
import TypeFunctions._
sealed trait Const[A] { type Apply[B] = A }
sealed trait ConstK[A] { type l[L[x]] = A }
type ConstK[A] = [F[_]] =>> A
*/
type Compose[F1[_], F2[_]] = [a] =>> F1[F2[a]]
sealed trait [A[_], B[_]] { type l[T] = A[B[T]] }
private type AnyLeft[A] = Left[A, Nothing]
private type AnyRight[A] = Right[Nothing, A]
@ -40,10 +31,6 @@ trait TypeFunctions:
final def idK[F[_]]: [a] => F[a] => F[a] = [a] =>
(fa: F[a]) => fa // .setToString("TypeFunctions.idK")
inline def nestCon[F1[_], F2[_], F3[_]](
f: [a] => F1[a] => F2[a]
): [a] => Compose[F1, F3][a] => Compose[F2, F3][a] =
f.asInstanceOf[[a] => Compose[F1, F3][a] => Compose[F2, F3][a]]
end TypeFunctions
/*

View File

@ -7,8 +7,6 @@
package sbt.util
import sbt.internal.util.Types.Compose
trait Applicative[F[_]] extends Apply[F]:
def pure[A1](x: () => A1): F[A1]
@ -20,14 +18,12 @@ object Applicative:
given Applicative[Option] = OptionInstances.optionMonad
given Applicative[List] = ListInstances.listMonad
given [F1[_], F2[_]](using Applicative[F1], Applicative[F2]): Applicative[Compose[F1, F2]] with
given [F1[_], F2[_]](using Applicative[F1], Applicative[F2]): Applicative[[a] =>> F1[F2[a]]] with
type F[x] = F1[F2[x]]
val F1 = summon[Applicative[F1]]
val F2 = summon[Applicative[F2]]
override def pure[A1](x: () => A1): F1[F2[A1]] = F1.pure(() => F2.pure(x))
override def ap[A1, A2](f1f2f: Compose[F1, F2][A1 => A2])(
f1f2a: Compose[F1, F2][A1]
): F1[F2[A2]] =
override def ap[A1, A2](f1f2f: F1[F2[A1 => A2]])(f1f2a: F1[F2[A1]]): F1[F2[A2]] =
F1.ap(F1.map(f1f2f) { (f2f: F2[A1 => A2]) => (f2a: F2[A1]) => F2.ap(f2f)(f2a) })(f1f2a)
end Applicative