lean4-htt/Lake/Config/Monad.lean
2022-07-22 10:46:14 -04:00

169 lines
4.5 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/-
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.Config.Context
import Lake.Config.Workspace
open System
open Lean (Name)
namespace Lake
abbrev MonadLakeEnv (m : Type → Type u) :=
MonadReaderOf Lake.Env m
abbrev MonadWorkspace (m : Type → Type u) :=
MonadReaderOf Workspace m
abbrev MonadLake (m : Type → Type u) :=
MonadReaderOf Context m
deriving instance Inhabited for Context
/-- Make a `Lake.Context` from a `Workspace`. -/
def mkLakeContext (ws : Workspace) : Context where
opaqueWs := ws
@[inline] def Context.workspace (self : Context) :=
self.opaqueWs.get
instance [MonadLake m] [Functor m] : MonadWorkspace m where
read := (·.workspace) <$> read
section
variable [MonadWorkspace m] [Functor m]
instance : MonadLakeEnv m where
read := (·.lakeEnv) <$> read
/-! ## Workspace Helpers -/
@[inline] def getWorkspace : m Workspace :=
read
@[inline] def findPackage? (name : Name) : m (Option Package) :=
(·.findPackage? name) <$> getWorkspace
@[inline] def findModule? (mod : Name) : m (Option Module) :=
(·.findModule? mod) <$> getWorkspace
@[inline] def findLeanExe? (mod : Name) : m (Option LeanExe) :=
(·.findLeanExe? mod) <$> getWorkspace
@[inline] def findLeanLib? (mod : Name) : m (Option LeanLib) :=
(·.findLeanLib? mod) <$> getWorkspace
@[inline] def findExternLib? (mod : Name) : m (Option ExternLib) :=
(·.findExternLib? mod) <$> getWorkspace
/-- Get the `leanPath` of the `Workspace`. -/
@[inline] def getLeanPath : m SearchPath :=
(·.leanPath) <$> getWorkspace
/-- Get the `leanSrcPath` of the `Workspace`. -/
@[inline] def getLeanSrcPath : m SearchPath :=
(·.leanSrcPath) <$> getWorkspace
/-- Get the `libPath` value of the `Workspace`. -/
@[inline] def getLibPath : m SearchPath :=
(·.libPath) <$> getWorkspace
/-- Get the `augmentedLeanPath` of the `Workspace`. -/
@[inline] def getAugmentedLeanPath : m SearchPath :=
(·.augmentedLeanPath) <$> getWorkspace
/-- Get the `augmentedLeanSrcPath` value of the `Workspace`. -/
@[inline] def getAugmentedLeanSrcPath : m SearchPath :=
(·.augmentedLeanSrcPath) <$> getWorkspace
/-- Get the `augmentedSharedLibPath` value of the `Workspace`. -/
@[inline] def getAugmentedSharedLibPath : m SearchPath :=
(·.augmentedSharedLibPath) <$> getWorkspace
/-- Get the `augmentedEnvVars` of the `Workspace`. -/
@[inline] def getAugmentedEnv : m (Array (String × Option String)) :=
(·.augmentedEnvVars) <$> getWorkspace
end
section
variable [MonadLakeEnv m] [Functor m]
/-! ## Environment Helpers -/
@[inline] def getLakeEnv : m Lake.Env :=
read
/-! ### Lean Install Helpers -/
@[inline] def getLeanInstall : m LeanInstall :=
(·.lean) <$> getLakeEnv
@[inline] def getLeanSysroot : m FilePath :=
(·.sysroot) <$> getLeanInstall
@[inline] def getLeanSrcDir : m FilePath :=
(·.srcDir) <$> getLeanInstall
/-- Get the `leanLibDir` of the detected `LeanInstall`. -/
@[inline] def getLeanLibDir : m FilePath :=
(·.leanLibDir) <$> getLeanInstall
@[inline] def getLeanIncludeDir : m FilePath :=
(·.includeDir) <$> getLeanInstall
@[inline] def getLeanSystemLibDir : m FilePath :=
(·.systemLibDir) <$> getLeanInstall
@[inline] def getLean : m FilePath :=
(·.lean) <$> getLeanInstall
@[inline] def getLeanc : m FilePath :=
(·.leanc) <$> getLeanInstall
@[inline] def getLeanSharedLib : m FilePath :=
(·.sharedLib) <$> getLeanInstall
@[inline] def getLeanAr : m FilePath :=
(·.ar) <$> getLeanInstall
@[inline] def getLeanCc : m FilePath :=
(·.cc) <$> getLeanInstall
@[inline] def getLeanCc? : m (Option String) :=
(·.leanCc?) <$> getLeanInstall
/-! ### Lake Install Helpers -/
@[inline] def getLakeInstall : m LakeInstall :=
(·.lake) <$> getLakeEnv
@[inline] def getLakeHome : m FilePath :=
(·.home) <$> getLakeInstall
@[inline] def getLakeSrcDir : m FilePath :=
(·.srcDir) <$> getLakeInstall
@[inline] def getLakeLibDir : m FilePath :=
(·.libDir) <$> getLakeInstall
@[inline] def getLake : m FilePath :=
(·.lake) <$> getLakeInstall
/-! ### Search Path Helpers -/
/-- Get the detected `LEAN_PATH` value of the Lake environment. -/
@[inline] def getEnvLeanPath : m SearchPath :=
(·.leanPath) <$> getLakeEnv
/-- Get the detected `LEAN_SRC_PATH` value of the Lake environment. -/
@[inline] def getEnvLeanSrcPath : m SearchPath :=
(·.leanSrcPath) <$> getLakeEnv
/-- Get the detected `sharedLibPathEnvVar` value of the Lake environment. -/
@[inline] def getEnvSharedLibPath : m SearchPath :=
(·.sharedLibPath) <$> getLakeEnv
end