summaryrefslogtreecommitdiff
path: root/progs/prelude/PreludeIOPrims.hi
blob: e4c2e74a9f7517c89207e9c481e48e75482102df (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
-- These lisp functions implement the standard Haskell requests

interface PreludeBltinIO where

import PreludeCore(String,Bin)
import PreludeIO(SystemState,IOResult,IO)
data IOResponse a = Succ a | Fail String

{-# Prelude #-}

primReadStringFile :: String -> IO (IOResponse String)
primWriteStringFile :: String -> String -> IO (IOResponse ())
primAppendStringFile :: String -> String -> IO (IOResponse ())
primReadBinFile :: String -> IO (IOResponse Bin)
primWriteBinFile :: String -> Bin -> IO (IOResponse ())
primAppendBinFile :: String -> Bin -> IO (IOResponse ())
primDeleteFile :: String -> IO (IOResponse ())
primStatusFile :: String -> IO (IOResponse String)
primReadStdin :: IO String
primWriteStdout :: String -> IO (IOResponse ())
primReadBinStdin :: IO (IOResponse Bin)
primWriteBinStdout :: Bin -> IO (IOResponse ())
primGetEnv :: String -> IO (IOResponse String)

{-#
primReadStringFile ::   LispName("prim.read-string-file")
primWriteStringFile ::  LispName("prim.write-string-file"), NoConversion
primAppendStringFile :: LispName("prim.append-string-file"), NoConversion
primReadBinFile ::      LispName("prim.read-bin-file")
primWriteBinFile ::     LispName("prim.write-bin-file")
primAppendBinFile ::    LispName("prim.append-bin-file")
primDeleteFile ::       LispName("prim.delete-file")
primStatusFile ::       LispName("prim.status-file")
primReadStdin ::        LispName("prim.read-string-stdin"), NoConversion
primWriteStdout ::      LispName("prim.write-string-stdout"), NoConversion
primReadBinStdin ::     LispName("prim.read-bin-stdin")
primWriteBinStdout ::   LispName("prim.write-bin-stdout")
primGetEnv ::           LispName("prim.getenv")
#-}

--   Monad prims

returnIO :: a -> IO a
getState :: IOResult a -> SystemState
getRes :: IOResult a -> a

{-#
returnIO :: LispName("prim.returnio"), 
            Strictness("N,S"), NoConversion, Complexity(3)
getState :: LispName("prim.getstate"), 
            Strictness("S"), NoConversion, Complexity(3)
getRes :: LispName("prim.getres"), 
          Strictness("S"), NoConversion
#-}