You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lean4game/server/leanserver/GameServer/SingleValPersistentEnvExten...

26 lines
1.1 KiB
Plaintext

import Lean
open Lean
/-- A persistent environment extension that is meant to hold a single (mutable) value. -/
def SingleValPersistentEnvExtension (α : Type) := PersistentEnvExtension α α α
instance {α} [Inhabited α] : Inhabited (SingleValPersistentEnvExtension α) :=
inferInstanceAs <| Inhabited <| PersistentEnvExtension α α α
def registerSingleValPersistentEnvExtension (name : Name) (α : Type) [Inhabited α] : IO (SingleValPersistentEnvExtension α) :=
registerPersistentEnvExtension {
name := name,
mkInitial := pure default,
addImportedFn := mkStateFromImportedEntries (fun _ b => return b) (return default),
addEntryFn := (λ _ b => b),
exportEntriesFn := λ x => #[x]
}
variable {m: Type → Type} [Monad m] [MonadEnv m] {α : Type} [Inhabited α]
def SingleValPersistentEnvExtension.get (ext : SingleValPersistentEnvExtension α) : m α :=
return ext.getState (← getEnv)
def SingleValPersistentEnvExtension.set (ext : SingleValPersistentEnvExtension α) (a : α) : m Unit := do
modifyEnv (ext.modifyState · (λ _ => a))