module System.Environment.Primitive where open import IO.Primitive open import Agda.Builtin.String open import Agda.Builtin.List open import Agda.Builtin.Unit import Foreign.Haskell as FFI open import System.FilePath.Posix postulate getArgs : IO (List String) getProgName : IO String getExecutablePath : IO AbsolutePath lookupEnv : String → IO (FFI.Maybe String) setEnv : String → String → IO ⊤ unsetEnv : String → IO ⊤ withArgs : ∀ {a} {A : Set a} → List String → IO A → IO A withProgName : ∀ {a} {A : Set a} → String → IO A → IO A getEnvironment : IO (List (FFI.Pair String String)) {-# FOREIGN GHC import qualified System.Environment as SE #-} {-# FOREIGN GHC import Data.Text #-} {-# FOREIGN GHC import Data.Function #-} {-# COMPILE GHC getArgs = fmap (fmap pack) SE.getArgs #-} {-# COMPILE GHC getProgName = fmap pack SE.getProgName #-} {-# COMPILE GHC getExecutablePath = SE.getExecutablePath #-} {-# COMPILE GHC lookupEnv = fmap (fmap pack) . SE.lookupEnv . unpack #-} {-# COMPILE GHC setEnv = SE.setEnv `on` unpack #-} {-# COMPILE GHC unsetEnv = SE.unsetEnv . unpack #-} {-# COMPILE GHC withArgs = \ _ _ -> SE.withArgs . fmap unpack #-} {-# COMPILE GHC withProgName = \ _ _ -> SE.withProgName . unpack #-} {-# COMPILE GHC getEnvironment = fmap (fmap (\ (a, b) -> (pack a, pack b))) SE.getEnvironment #-}