@@ -22,9 +22,11 @@ module Node.FS.Async
22
22
, writeTextFile
23
23
, appendFile
24
24
, appendTextFile
25
+ , exists
25
26
) where
26
27
27
28
import Control.Monad.Eff
29
+ import Control.Monad.Eff.Unsafe (unsafeInterleaveEff )
28
30
import Control.Monad.Eff.Exception
29
31
import Data.Date
30
32
import Data.Either
@@ -72,7 +74,13 @@ foreign import fs "var fs = require('fs');" ::
72
74
, readFile :: forall a opts . Fn3 FilePath { | opts } (JSCallback a ) Unit
73
75
, writeFile :: forall a opts . Fn4 FilePath a { | opts } (JSCallback Unit ) Unit
74
76
, appendFile :: forall a opts . Fn4 FilePath a { | opts } (JSCallback Unit ) Unit
77
+ , exists :: forall a . Fn2 FilePath (Boolean -> a ) Unit
75
78
}
79
+
80
+ foreign import mkEff
81
+ " function mkEff(action) {\
82
+ \ return action;\
83
+ \}" :: forall eff a . (Unit -> a ) -> Eff eff a
76
84
77
85
-- |
78
86
-- Type synonym for callback functions.
@@ -87,7 +95,7 @@ rename :: forall eff. FilePath
87
95
-> Callback eff Unit
88
96
-> Eff (fs :: FS | eff ) Unit
89
97
90
- rename oldFile newFile cb = return $ runFn3
98
+ rename oldFile newFile cb = mkEff $ \_ -> runFn3
91
99
fs.rename oldFile newFile (handleCallback cb)
92
100
93
101
-- |
@@ -98,7 +106,7 @@ truncate :: forall eff. FilePath
98
106
-> Callback eff Unit
99
107
-> Eff (fs :: FS | eff ) Unit
100
108
101
- truncate file len cb = return $ runFn3
109
+ truncate file len cb = mkEff $ \_ -> runFn3
102
110
fs.truncate file len (handleCallback cb)
103
111
104
112
-- |
@@ -110,7 +118,7 @@ chown :: forall eff. FilePath
110
118
-> Callback eff Unit
111
119
-> Eff (fs :: FS | eff ) Unit
112
120
113
- chown file uid gid cb = return $ runFn4
121
+ chown file uid gid cb = mkEff $ \_ -> runFn4
114
122
fs.chown file uid gid (handleCallback cb)
115
123
116
124
-- |
@@ -121,7 +129,7 @@ chmod :: forall eff. FilePath
121
129
-> Callback eff Unit
122
130
-> Eff (fs :: FS | eff ) Unit
123
131
124
- chmod file mode cb = return $ runFn3
132
+ chmod file mode cb = mkEff $ \_ -> runFn3
125
133
fs.chmod file mode (handleCallback cb)
126
134
127
135
-- |
@@ -131,7 +139,7 @@ stat :: forall eff. FilePath
131
139
-> Callback eff Stats
132
140
-> Eff (fs :: FS | eff ) Unit
133
141
134
- stat file cb = return $ runFn2
142
+ stat file cb = mkEff $ \_ -> runFn2
135
143
fs.stat file (handleCallback $ cb <<< (<$>) Stats )
136
144
137
145
-- |
@@ -142,7 +150,7 @@ link :: forall eff. FilePath
142
150
-> Callback eff Unit
143
151
-> Eff (fs :: FS | eff ) Unit
144
152
145
- link src dst cb = return $ runFn3
153
+ link src dst cb = mkEff $ \_ -> runFn3
146
154
fs.link src dst (handleCallback cb)
147
155
148
156
-- |
@@ -154,7 +162,7 @@ symlink :: forall eff. FilePath
154
162
-> Callback eff Unit
155
163
-> Eff (fs :: FS | eff ) Unit
156
164
157
- symlink src dest ty cb = return $ runFn4
165
+ symlink src dest ty cb = mkEff $ \_ -> runFn4
158
166
fs.symlink src dest (show ty) (handleCallback cb)
159
167
160
168
-- |
@@ -164,7 +172,7 @@ readlink :: forall eff. FilePath
164
172
-> Callback eff FilePath
165
173
-> Eff (fs :: FS | eff ) Unit
166
174
167
- readlink path cb = return $ runFn2
175
+ readlink path cb = mkEff $ \_ -> runFn2
168
176
fs.readlink path (handleCallback cb)
169
177
170
178
-- |
@@ -174,7 +182,7 @@ realpath :: forall eff. FilePath
174
182
-> Callback eff FilePath
175
183
-> Eff (fs :: FS | eff ) Unit
176
184
177
- realpath path cb = return $ runFn3
185
+ realpath path cb = mkEff $ \_ -> runFn3
178
186
fs.realpath path {} (handleCallback cb)
179
187
180
188
-- |
@@ -186,7 +194,7 @@ realpath' :: forall eff cache. FilePath
186
194
-> Callback eff FilePath
187
195
-> Eff (fs :: FS | eff ) Unit
188
196
189
- realpath' path cache cb = return $ runFn3
197
+ realpath' path cache cb = mkEff $ \_ -> runFn3
190
198
fs.realpath path cache (handleCallback cb)
191
199
192
200
-- |
@@ -196,7 +204,7 @@ unlink :: forall eff. FilePath
196
204
-> Callback eff Unit
197
205
-> Eff (fs :: FS | eff ) Unit
198
206
199
- unlink file cb = return $ runFn2
207
+ unlink file cb = mkEff $ \_ -> runFn2
200
208
fs.unlink file (handleCallback cb)
201
209
202
210
-- |
@@ -206,7 +214,7 @@ rmdir :: forall eff. FilePath
206
214
-> Callback eff Unit
207
215
-> Eff (fs :: FS | eff ) Unit
208
216
209
- rmdir file cb = return $ runFn2
217
+ rmdir file cb = mkEff $ \_ -> runFn2
210
218
fs.rmdir file (handleCallback cb)
211
219
212
220
-- |
@@ -226,7 +234,7 @@ mkdir' :: forall eff. FilePath
226
234
-> Callback eff Unit
227
235
-> Eff (fs :: FS | eff ) Unit
228
236
229
- mkdir' file mode cb = return $ runFn3
237
+ mkdir' file mode cb = mkEff $ \_ -> runFn3
230
238
fs.mkdir file mode (handleCallback cb)
231
239
232
240
-- |
@@ -236,7 +244,7 @@ readdir :: forall eff. FilePath
236
244
-> Callback eff [FilePath ]
237
245
-> Eff (fs :: FS | eff ) Unit
238
246
239
- readdir file cb = return $ runFn2
247
+ readdir file cb = mkEff $ \_ -> runFn2
240
248
fs.readdir file (handleCallback cb)
241
249
242
250
-- |
@@ -248,7 +256,7 @@ utimes :: forall eff. FilePath
248
256
-> Callback eff Unit
249
257
-> Eff (fs :: FS | eff ) Unit
250
258
251
- utimes file atime mtime cb = return $ runFn4
259
+ utimes file atime mtime cb = mkEff $ \_ -> runFn4
252
260
fs.utimes file
253
261
((toEpochMilliseconds atime) / 1000 )
254
262
((toEpochMilliseconds mtime) / 1000 )
@@ -261,7 +269,7 @@ readFile :: forall eff. FilePath
261
269
-> Callback eff Buffer
262
270
-> Eff (fs :: FS | eff ) Unit
263
271
264
- readFile file cb = return $ runFn3
272
+ readFile file cb = mkEff $ \_ -> runFn3
265
273
fs.readFile file {} (handleCallback cb)
266
274
267
275
-- |
@@ -272,7 +280,7 @@ readTextFile :: forall eff. Encoding
272
280
-> Callback eff String
273
281
-> Eff (fs :: FS | eff ) Unit
274
282
275
- readTextFile encoding file cb = return $ runFn3
283
+ readTextFile encoding file cb = mkEff $ \_ -> runFn3
276
284
fs.readFile file { encoding: show encoding } (handleCallback cb)
277
285
278
286
-- |
@@ -283,7 +291,7 @@ writeFile :: forall eff. FilePath
283
291
-> Callback eff Unit
284
292
-> Eff (fs :: FS | eff ) Unit
285
293
286
- writeFile file buff cb = return $ runFn4
294
+ writeFile file buff cb = mkEff $ \_ -> runFn4
287
295
fs.writeFile file buff {} (handleCallback cb)
288
296
289
297
-- |
@@ -295,7 +303,7 @@ writeTextFile :: forall eff. Encoding
295
303
-> Callback eff Unit
296
304
-> Eff (fs :: FS | eff ) Unit
297
305
298
- writeTextFile encoding file buff cb = return $ runFn4
306
+ writeTextFile encoding file buff cb = mkEff $ \_ -> runFn4
299
307
fs.writeFile file buff { encoding: show encoding } (handleCallback cb)
300
308
301
309
-- |
@@ -306,7 +314,7 @@ appendFile :: forall eff. FilePath
306
314
-> Callback eff Unit
307
315
-> Eff (fs :: FS | eff ) Unit
308
316
309
- appendFile file buff cb = return $ runFn4
317
+ appendFile file buff cb = mkEff $ \_ -> runFn4
310
318
fs.appendFile file buff {} (handleCallback cb)
311
319
312
320
-- |
@@ -318,5 +326,14 @@ appendTextFile :: forall eff. Encoding
318
326
-> Callback eff Unit
319
327
-> Eff (fs :: FS | eff ) Unit
320
328
321
- appendTextFile encoding file buff cb = return $ runFn4
329
+ appendTextFile encoding file buff cb = mkEff $ \_ -> runFn4
322
330
fs.appendFile file buff { encoding: show encoding } (handleCallback cb)
331
+
332
+ -- |
333
+ -- Check if the path exists.
334
+ --
335
+ exists :: forall eff . FilePath
336
+ -> (Boolean -> Eff eff Unit )
337
+ -> Eff (fs :: FS | eff ) Unit
338
+ exists file cb = mkEff $ \_ -> runFn2
339
+ fs.exists file $ \b -> runPure (unsafeInterleaveEff (cb b))
0 commit comments