on 77ea792 help sign in
38 lines 1.1 kB history raw
1module Effect.System
3-- Various system interaction features (this is not necessarily the right way
4-- to split them up, I just need some of them now :))
6import Effects
7import System
8import Control.IOExcept
10data System : Effect where
11 Args : { () } System (List String)
12 Time : { () } System Int
13 GetEnv : String -> { () } System (Maybe String)
15instance Handler System IO where
16 handle () Args k = do x <- getArgs; k x ()
17 handle () Time k = do x <- time; k x ()
18 handle () (GetEnv s) k = do x <- getEnv s; k x ()
20instance Handler System (IOExcept a) where
21 handle () Args k = do x <- ioe_lift getArgs; k x ()
22 handle () Time k = do x <- ioe_lift time; k x ()
23 handle () (GetEnv s) k = do x <- ioe_lift $ getEnv s; k x ()
25--- The Effect and associated functions
27SYSTEM : EFFECT
28SYSTEM = MkEff () System
30getArgs : Handler System e => { [SYSTEM] } Eff e (List String)
31getArgs = call Args
33time : Handler System e => { [SYSTEM] } Eff e Int
34time = call Time
36getEnv : Handler System e => String -> { [SYSTEM] } Eff e (Maybe String)
37getEnv s = call $ GetEnv s