module IO where open import Base postulate IO : Set -> Set getLine : IO String putStrLn : String -> IO Unit mapM₋ : {A : Set} -> (A -> IO Unit) -> List A -> IO Unit bindIO : {A B : Set} -> IO A -> (A -> IO B) -> IO B returnIO : {A : Set} -> A -> IO A {-# COMPILED putStrLn putStrLn #-} {-# COMPILED mapM₋ (\_ -> mapM_ :: (a -> IO ()) -> [a] -> IO ()) #-} -- we need to throw away the type argument to mapM_ -- and resolve the overloading explicitly (since Alonzo -- output is sprinkled with unsafeCoerce#). {-# COMPILED bindIO (\_ _ -> (>>=) :: IO a -> (a -> IO b) -> IO b) #-} {-# COMPILED returnIO (\_ -> return :: a -> IO a) #-} {-# COMPILED getLine getLine #-}