Skip to content

Commit 576fc66

Browse files
committed
Fix Async actions from evaluating too early
1 parent aa0f4a6 commit 576fc66

File tree

1 file changed

+27
-21
lines changed

1 file changed

+27
-21
lines changed

src/Node/FS/Async.purs

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,13 @@ foreign import fs "var fs = require('fs');" ::
7272
, readFile :: forall a opts. Fn3 FilePath { | opts } (JSCallback a) Unit
7373
, writeFile :: forall a opts. Fn4 FilePath a { | opts } (JSCallback Unit) Unit
7474
, appendFile :: forall a opts. Fn4 FilePath a { | opts } (JSCallback Unit) Unit
75+
, exists :: forall a. Fn2 FilePath (Boolean -> a) Unit
7576
}
77+
78+
foreign import mkEff
79+
"function mkEff(action) {\
80+
\ return action;\
81+
\}" :: forall eff a. (Unit -> a) -> Eff eff a
7682

7783
-- |
7884
-- Type synonym for callback functions.
@@ -87,7 +93,7 @@ rename :: forall eff. FilePath
8793
-> Callback eff Unit
8894
-> Eff (fs :: FS | eff) Unit
8995

90-
rename oldFile newFile cb = return $ runFn3
96+
rename oldFile newFile cb = mkEff $ \_ -> runFn3
9197
fs.rename oldFile newFile (handleCallback cb)
9298

9399
-- |
@@ -98,7 +104,7 @@ truncate :: forall eff. FilePath
98104
-> Callback eff Unit
99105
-> Eff (fs :: FS | eff) Unit
100106

101-
truncate file len cb = return $ runFn3
107+
truncate file len cb = mkEff $ \_ -> runFn3
102108
fs.truncate file len (handleCallback cb)
103109

104110
-- |
@@ -110,7 +116,7 @@ chown :: forall eff. FilePath
110116
-> Callback eff Unit
111117
-> Eff (fs :: FS | eff) Unit
112118

113-
chown file uid gid cb = return $ runFn4
119+
chown file uid gid cb = mkEff $ \_ -> runFn4
114120
fs.chown file uid gid (handleCallback cb)
115121

116122
-- |
@@ -121,7 +127,7 @@ chmod :: forall eff. FilePath
121127
-> Callback eff Unit
122128
-> Eff (fs :: FS | eff) Unit
123129

124-
chmod file mode cb = return $ runFn3
130+
chmod file mode cb = mkEff $ \_ -> runFn3
125131
fs.chmod file mode (handleCallback cb)
126132

127133
-- |
@@ -131,7 +137,7 @@ stat :: forall eff. FilePath
131137
-> Callback eff Stats
132138
-> Eff (fs :: FS | eff) Unit
133139

134-
stat file cb = return $ runFn2
140+
stat file cb = mkEff $ \_ -> runFn2
135141
fs.stat file (handleCallback $ cb <<< (<$>) Stats)
136142

137143
-- |
@@ -142,7 +148,7 @@ link :: forall eff. FilePath
142148
-> Callback eff Unit
143149
-> Eff (fs :: FS | eff) Unit
144150

145-
link src dst cb = return $ runFn3
151+
link src dst cb = mkEff $ \_ -> runFn3
146152
fs.link src dst (handleCallback cb)
147153

148154
-- |
@@ -154,7 +160,7 @@ symlink :: forall eff. FilePath
154160
-> Callback eff Unit
155161
-> Eff (fs :: FS | eff) Unit
156162

157-
symlink src dest ty cb = return $ runFn4
163+
symlink src dest ty cb = mkEff $ \_ -> runFn4
158164
fs.symlink src dest (show ty) (handleCallback cb)
159165

160166
-- |
@@ -164,7 +170,7 @@ readlink :: forall eff. FilePath
164170
-> Callback eff FilePath
165171
-> Eff (fs :: FS | eff) Unit
166172

167-
readlink path cb = return $ runFn2
173+
readlink path cb = mkEff $ \_ -> runFn2
168174
fs.readlink path (handleCallback cb)
169175

170176
-- |
@@ -174,7 +180,7 @@ realpath :: forall eff. FilePath
174180
-> Callback eff FilePath
175181
-> Eff (fs :: FS | eff) Unit
176182

177-
realpath path cb = return $ runFn3
183+
realpath path cb = mkEff $ \_ -> runFn3
178184
fs.realpath path {} (handleCallback cb)
179185

180186
-- |
@@ -186,7 +192,7 @@ realpath' :: forall eff cache. FilePath
186192
-> Callback eff FilePath
187193
-> Eff (fs :: FS | eff) Unit
188194

189-
realpath' path cache cb = return $ runFn3
195+
realpath' path cache cb = mkEff $ \_ -> runFn3
190196
fs.realpath path cache (handleCallback cb)
191197

192198
-- |
@@ -196,7 +202,7 @@ unlink :: forall eff. FilePath
196202
-> Callback eff Unit
197203
-> Eff (fs :: FS | eff) Unit
198204

199-
unlink file cb = return $ runFn2
205+
unlink file cb = mkEff $ \_ -> runFn2
200206
fs.unlink file (handleCallback cb)
201207

202208
-- |
@@ -206,7 +212,7 @@ rmdir :: forall eff. FilePath
206212
-> Callback eff Unit
207213
-> Eff (fs :: FS | eff) Unit
208214

209-
rmdir file cb = return $ runFn2
215+
rmdir file cb = mkEff $ \_ -> runFn2
210216
fs.rmdir file (handleCallback cb)
211217

212218
-- |
@@ -226,7 +232,7 @@ mkdir' :: forall eff. FilePath
226232
-> Callback eff Unit
227233
-> Eff (fs :: FS | eff) Unit
228234

229-
mkdir' file mode cb = return $ runFn3
235+
mkdir' file mode cb = mkEff $ \_ -> runFn3
230236
fs.mkdir file mode (handleCallback cb)
231237

232238
-- |
@@ -236,7 +242,7 @@ readdir :: forall eff. FilePath
236242
-> Callback eff [FilePath]
237243
-> Eff (fs :: FS | eff) Unit
238244

239-
readdir file cb = return $ runFn2
245+
readdir file cb = mkEff $ \_ -> runFn2
240246
fs.readdir file (handleCallback cb)
241247

242248
-- |
@@ -248,7 +254,7 @@ utimes :: forall eff. FilePath
248254
-> Callback eff Unit
249255
-> Eff (fs :: FS | eff) Unit
250256

251-
utimes file atime mtime cb = return $ runFn4
257+
utimes file atime mtime cb = mkEff $ \_ -> runFn4
252258
fs.utimes file
253259
((toEpochMilliseconds atime) / 1000)
254260
((toEpochMilliseconds mtime) / 1000)
@@ -261,7 +267,7 @@ readFile :: forall eff. FilePath
261267
-> Callback eff Buffer
262268
-> Eff (fs :: FS | eff) Unit
263269

264-
readFile file cb = return $ runFn3
270+
readFile file cb = mkEff $ \_ -> runFn3
265271
fs.readFile file {} (handleCallback cb)
266272

267273
-- |
@@ -272,7 +278,7 @@ readTextFile :: forall eff. Encoding
272278
-> Callback eff String
273279
-> Eff (fs :: FS | eff) Unit
274280

275-
readTextFile encoding file cb = return $ runFn3
281+
readTextFile encoding file cb = mkEff $ \_ -> runFn3
276282
fs.readFile file { encoding: show encoding } (handleCallback cb)
277283

278284
-- |
@@ -283,7 +289,7 @@ writeFile :: forall eff. FilePath
283289
-> Callback eff Unit
284290
-> Eff (fs :: FS | eff) Unit
285291

286-
writeFile file buff cb = return $ runFn4
292+
writeFile file buff cb = mkEff $ \_ -> runFn4
287293
fs.writeFile file buff {} (handleCallback cb)
288294

289295
-- |
@@ -295,7 +301,7 @@ writeTextFile :: forall eff. Encoding
295301
-> Callback eff Unit
296302
-> Eff (fs :: FS | eff) Unit
297303

298-
writeTextFile encoding file buff cb = return $ runFn4
304+
writeTextFile encoding file buff cb = mkEff $ \_ -> runFn4
299305
fs.writeFile file buff { encoding: show encoding } (handleCallback cb)
300306

301307
-- |
@@ -306,7 +312,7 @@ appendFile :: forall eff. FilePath
306312
-> Callback eff Unit
307313
-> Eff (fs :: FS | eff) Unit
308314

309-
appendFile file buff cb = return $ runFn4
315+
appendFile file buff cb = mkEff $ \_ -> runFn4
310316
fs.appendFile file buff {} (handleCallback cb)
311317

312318
-- |
@@ -318,5 +324,5 @@ appendTextFile :: forall eff. Encoding
318324
-> Callback eff Unit
319325
-> Eff (fs :: FS | eff) Unit
320326

321-
appendTextFile encoding file buff cb = return $ runFn4
327+
appendTextFile encoding file buff cb = mkEff $ \_ -> runFn4
322328
fs.appendFile file buff { encoding: show encoding } (handleCallback cb)

0 commit comments

Comments
 (0)