alms-0.6.0: src/Basis/IO.hs
module Basis.IO ( entries ) where
import qualified Data.Loc
import BasisUtils
import AST
import Util
import Value (Valuable(..), vinjData, vprjDataM)
import qualified IO
import Data.Data (Typeable, Data)
instance Valuable IO.Handle where
veq = (==)
vppr _ = text "#<handle>"
instance Valuable IO.IOMode where
veq = (==)
vppr = text . show
vinj = vinjData
vprjM = vprjDataM
deriving instance Typeable IO.IOMode
deriving instance Data IO.IOMode
entries :: [Entry Raw]
entries = [
dec [sgQ| type handle |],
dec [sgQ| type ioMode = ReadMode
| WriteMode
| AppendMode
| ReadWriteMode |],
-- File operations
fun "openFile" -: [ty| string -> ioMode -> handle |]
-= IO.openFile,
fun "hGetChar" -: [ty| handle -> char |]
-= fmap char2integer . IO.hGetChar,
fun "hGetLine" -: [ty| handle -> string |]
-= IO.hGetLine,
fun "hIsEOF" -: [ty| handle -> bool |]
-= IO.hIsEOF,
fun "hPutChar" -: [ty| handle -> char -> unit |]
-= \h -> IO.hPutChar h . integer2char,
fun "hPutStr" -: [ty| handle -> string -> unit |]
-= IO.hPutStr,
fun "hClose" -: [ty| handle -> unit |]
-= IO.hClose,
fun "hFlush" -: [ty| handle -> unit |]
-= IO.hFlush,
val "stdin" -: [ty| handle |] -= IO.stdin,
val "stdout" -: [ty| handle |] -= IO.stdout,
val "stderr" -: [ty| handle |] -= IO.stderr
]