51 lines
1.5 KiB
Text
51 lines
1.5 KiB
Text
/-
|
||
Copyright (c) 2021 Mac Malone. All rights reserved.
|
||
Released under Apache 2.0 license as described in the file LICENSE.
|
||
Authors: Mac Malone
|
||
-/
|
||
import Lake.Util.Log
|
||
import Lake.Util.Task
|
||
import Lake.Util.Error
|
||
import Lake.Util.OptionIO
|
||
import Lake.Config.Context
|
||
import Lake.Build.Trace
|
||
import Lake.Build.Store
|
||
import Lake.Build.Topological
|
||
|
||
open System
|
||
namespace Lake
|
||
|
||
/-- A Lake context with some additional caching for builds. -/
|
||
structure BuildContext extends Context where
|
||
leanTrace : BuildTrace
|
||
oldMode : Bool := false
|
||
|
||
/-- A transformer to equip a monad with a `BuildContext`. -/
|
||
abbrev BuildT := ReaderT BuildContext
|
||
|
||
/-- The monad for the Lake build manager. -/
|
||
abbrev SchedulerM := BuildT <| LogT BaseIO
|
||
|
||
/-- The core monad for Lake builds. -/
|
||
abbrev BuildM := BuildT LogIO
|
||
|
||
/-- A transformer to equip a monad with a Lake build store. -/
|
||
abbrev BuildStoreT := StateT BuildStore
|
||
|
||
/-- A Lake build cycle. -/
|
||
abbrev BuildCycle := Cycle BuildKey
|
||
|
||
/-- A transformer for monads that may encounter a build cycle. -/
|
||
abbrev BuildCycleT := CycleT BuildKey
|
||
|
||
/-- A recursive build of a Lake build store that may encounter a cycle. -/
|
||
abbrev RecBuildM := BuildCycleT <| BuildStoreT BuildM
|
||
|
||
instance [Pure m] : MonadLift LakeM (BuildT m) where
|
||
monadLift x := fun ctx => pure <| x.run ctx.toContext
|
||
|
||
@[inline] def BuildM.run (ctx : BuildContext) (self : BuildM α) : LogIO α :=
|
||
self ctx
|
||
|
||
def BuildM.catchFailure (f : Unit → BaseIO α) (self : BuildM α) : SchedulerM α :=
|
||
fun ctx logMethods => self ctx logMethods |>.catchFailure f
|