mirror of https://github.com/sbt/sbt.git
remove Composite and replace it with type lambda
This commit is contained in:
parent
cf3c9bbf0d
commit
10fc5da8b6
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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]])(
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue