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
#-}
|