lean4-htt/Lake/Config/Monad.lean

86 lines
2.3 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.InstallPath
import Lake.Config.Workspace
open System
open Lean (Name)
namespace Lake
deriving instance Inhabited for Context
class MonadLake (m : Type → Type u) where
getLeanInstall : m LeanInstall
getLakeInstall : m LakeInstall
getWorkspace : m Workspace
export MonadLake (getLeanInstall getLakeInstall getWorkspace)
instance [MonadLift m n] [MonadLake m] : MonadLake n where
getLeanInstall := liftM (m := m) <| getLeanInstall
getLakeInstall := liftM (m := m) <| getLakeInstall
getWorkspace := liftM (m := m) <| getWorkspace
@[inline] def Context.workspace (self : Context) :=
self.opaqueWs.get
instance [Monad m] : MonadLake (LakeT m) where
getLeanInstall := (·.lean) <$> read
getLakeInstall := (·.lake) <$> read
getWorkspace := (·.workspace) <$> read
variable [MonadLake m]
def getLeanEnv [Monad m] : m (Array (String × Option String)) := do
let ws ← getWorkspace
let lean ← getLeanInstall
return #[
("LEAN_SYSROOT", lean.sysroot.toString),
("LEAN_AR", lean.ar.toString),
("LEAN_CC", lean.cc.toString),
("LEAN_PATH", ws.oleanPath.toString),
("LEAN_SRC_PATH", ws.leanSrcPath.toString)
]
variable [Functor m]
@[inline] def getPackageByName? (name : Name) : m (Option Package) :=
(·.packageByName? name) <$> getWorkspace
@[inline] def getPackageForModule? (mod : Name) : m (Option Package) :=
(·.packageForModule? mod) <$> getWorkspace
@[inline] def getOleanPath : m SearchPath :=
(·.oleanPath) <$> getWorkspace
@[inline] def getLeanSysroot : m FilePath :=
(·.sysroot) <$> getLeanInstall
@[inline] def getLeanLibDir : m FilePath :=
(·.libDir) <$> getLeanInstall
@[inline] def getLeanOleanDir : m FilePath :=
(·.oleanDir) <$> getLeanInstall
@[inline] def getLeanIncludeDir : m FilePath :=
(·.includeDir) <$> getLeanInstall
@[inline] def getLean : m FilePath :=
(·.lean) <$> getLeanInstall
@[inline] def getLeanc : m FilePath :=
(·.leanc) <$> getLeanInstall
@[inline] def getLeanAr : m FilePath :=
(·.ar) <$> getLeanInstall
@[inline] def getLeanCc : m FilePath :=
(·.cc) <$> getLeanInstall
@[inline] def getLakeOleanDir : m FilePath :=
(·.oleanDir) <$> getLakeInstall