module Haskell.Prim.IO where
open import Haskell.Prim
open import Haskell.Prim.Show
open import Haskell.Prim.String
postulate IO : ∀{a} → Set a → Set a
FilePath = String
postulate
  -- Input functions
  interact       : (String → String) → IO ⊤
  getContents    : IO String
  getLine        : IO String
  getChar        : IO Char
  -- Output functions
  print          : ⦃ Show a ⦄ → a → IO ⊤
  putChar        : Char → IO ⊤
  putStr         : String → IO ⊤
  putStrLn       : String → IO ⊤
  -- Files
  readFile       : FilePath → IO String
  writeFile      : FilePath → String → IO ⊤
  appendFile     : FilePath → String → IO ⊤