0 | module System.Posix.File
3 | import System.Posix.File.Prim as P
5 | import public Control.Monad.Resource
6 | import public Data.Buffer
7 | import public Data.Buffer.Core
8 | import public Data.ByteString
9 | import public Data.ByteVect
11 | import public Data.C.Ptr
13 | import public System.Posix.Errno
14 | import public System.Posix.File.FileDesc
15 | import public System.Posix.File.Flags
16 | import public System.Posix.File.ReadRes
17 | import public System.Posix.File.Whence
27 | openFile : Has Errno es => EIO1 f => String -> Flags -> Mode -> f es Fd
28 | openFile p f m = elift1 (P.openFile p f m)
32 | close' : FileDesc a => HasIO io => (fd : a) -> io ()
33 | close' fd = primIO (P.close' fd)
36 | ELift1 World f => FileDesc a => Resource f a where
37 | cleanup fd = lift1 {s = World} $
ffi (P.close' fd)
39 | parameters {auto fid : FileDesc a}
41 | {auto has : Has Errno es}
47 | close = elift1 (P.close fd)
51 | readPtr : (0 r : Type) -> FromPtr r => CPtr -> f es r
52 | readPtr r p = elift1 (P.readPtr fd r p)
56 | readPtrRes : (0 r : Type) -> FromPtr r => CPtr -> f es (ReadRes r)
57 | readPtrRes r p = elift1 (P.readPtrRes fd r p)
61 | read : (0 r : Type) -> FromBuf r => (n : Bits32) -> f es r
62 | read r n = elift1 (P.read fd r n)
66 | readRaw : Buf -> f es EMBuffer
67 | readRaw buf = elift1 (P.readRaw fd buf)
75 | readres : (0 r : Type) -> FromBuf r => (n : Bits32) -> f es (ReadRes r)
76 | readres r n = elift1 (P.readres fd r n)
85 | pread : (0 r : Type) -> FromBuf r => (n : Bits32) -> OffT -> f es r
86 | pread r n o = elift1 (P.pread fd r n o)
94 | write : ToBuf r => r -> f es Bits32
95 | write v = elift1 (P.write fd v)
102 | fwrite : ToBuf r => r -> f es ()
103 | fwrite v = elift1 (P.fwrite fd v)
112 | pwrite : ToBuf r => r -> OffT -> f es Bits32
113 | pwrite bs o = elift1 (P.pwrite fd bs o)
123 | lseek : FileDesc a => HasIO io => (fd : a) -> OffT -> Whence -> io OffT
124 | lseek fd offset whence = primIO (P.lseek fd offset whence)
130 | parameters {auto fid : FileDesc a}
132 | {auto has : Has Errno es}
133 | {auto eoi : EIO1 f}
141 | dup = elift1 (P.dup fd)
148 | dup2 : FileDesc b => (fd2 : b) -> f es Fd
149 | dup2 fd2 = elift1 (P.dup2 fd fd2)
156 | dupfd : (start : Bits32) -> f es Fd
157 | dupfd start = elift1 (P.dupfd fd start)
165 | getFlags : f es Flags
166 | getFlags = elift1 (P.getFlags fd)
172 | setFlags : Flags -> f es ()
173 | setFlags fs = elift1 (P.setFlags fd fs)
178 | addFlags : Flags -> f es ()
179 | addFlags fs = elift1 (P.addFlags fd fs)
183 | ftruncate : OffT -> f es ()
184 | ftruncate o = elift1 (P.ftruncate fd o)
188 | truncate : Has Errno es => EIO1 f => String -> OffT -> f es ()
189 | truncate s o = elift1 (P.truncate s o)
193 | mkstemp : Has Errno es => EIO1 f => String -> f es (Fd, String)
194 | mkstemp s = elift1 (P.mkstemp s)
202 | link : Has Errno es => EIO1 f => (file, link : String) -> f es ()
203 | link f l = elift1 (P.link f l)
207 | symlink : Has Errno es => EIO1 f => (file, link : String) -> f es ()
208 | symlink f l = elift1 (P.symlink f l)
218 | unlink : Has Errno es => EIO1 f => (file : String) -> f es ()
219 | unlink file = elift1 (P.unlink file)
224 | remove : Has Errno es => EIO1 f => (file : String) -> f es ()
225 | remove file = elift1 (P.remove file)
232 | rename : Has Errno es => EIO1 f => (file, link : String) -> f es ()
233 | rename f l = elift1 (P.rename f l)
240 | readlink : Has Errno es => EIO1 f => (file : String) -> f es ByteString
241 | readlink file = elift1 (P.readlink file)
247 | parameters {auto hio : HasIO io}
250 | stdout : String -> io ()
251 | stdout = primIO . P.stdout
254 | stdoutLn : String -> io ()
255 | stdoutLn = primIO . P.stdoutLn
258 | prnt : Show a => a -> io ()
259 | prnt = primIO . P.prnt
262 | prntLn : Show a => a -> io ()
263 | prntLn = primIO . P.prntLn
266 | stderr : String -> io ()
267 | stderr = primIO . P.stderr
270 | stderrLn : String -> io ()
271 | stderrLn = primIO . P.stderrLn