module System.Environment where
open import Level
open import Agda.Builtin.String
open import Agda.Builtin.Unit
open import Foreign.Haskell.Coerce
open import System.FilePath.Posix
open import Data.Maybe.Base
open import Data.Product
open import Agda.Builtin.List
import System.Environment.Primitive as Prim
open import Codata.IO
private
variable
a ℓ : Level
getArgs : IO ℓ (List String)
getProgName : IO ℓ String
getExecutablePath : IO ℓ AbsolutePath
lookupEnv : String → IO ℓ (Maybe String)
setEnv : String → String → IO ℓ ⊤
unsetEnv : String → IO ℓ ⊤
withArgs : {A : Set a} {{_ : a ≤ˡ ℓ}} → List String → IO ℓ A → IO ℓ A
withProgName : {A : Set a} {{_ : a ≤ˡ ℓ}} → String → IO ℓ A → IO ℓ A
getEnvironment : IO ℓ (List (String × String))
getArgs = lift Prim.getArgs
getProgName = lift Prim.getProgName
getExecutablePath = lift Prim.getExecutablePath
lookupEnv = λ var → coerce <$> lift (Prim.lookupEnv var)
setEnv = λ var str → lift (Prim.setEnv var str)
unsetEnv = λ var → lift (Prim.unsetEnv var)
withArgs = λ args io → lift (Prim.withArgs args (run io))
withProgName = λ nm io → lift (Prim.withProgName nm (run io))
getEnvironment = lift (coerce Prim.getEnvironment)