7 import Control.Monad.Aff (Aff(), makeAff)
8 import Control.Monad.Eff (Eff())
9 import Control.Monad.Eff.Exception (Error())
11 import Data.Maybe (Maybe(..))
12 import Data.String.Regex (Regex())
16 foreign import data FS :: !
18 writeFileUtf8 :: forall eff. String -> String -> Aff (fs :: FS | eff) Unit
19 writeFileUtf8 filepath contents = makeAff $ runFn4 writeFileUtf8Fn filepath contents
21 foreign import writeFileUtf8Fn """
22 function writeFileUtf8Fn(filepath, contents, errback, callback) {
24 var fs = require('fs');
26 fs.writeFile(filepath, contents, function(error){
27 if (error) errback(error)();
32 """ :: forall eff. Fn4 String
34 (Error -> Eff (fs :: FS | eff) Unit)
35 (Unit -> Eff (fs :: FS | eff) Unit)
36 (Eff (fs :: FS | eff) Unit)
38 findFileUtf8 :: forall eff. Regex -> [String] -> Aff (fs :: FS | eff) (Maybe String)
39 findFileUtf8 regexp filepaths = makeAff $ runFn6 findFileUtf8Fn Nothing Just regexp filepaths
41 foreign import findFileUtf8Fn """
42 function findFileUtf8Fn(nothing, just, regex, filepaths, errback, callback) {
44 var fs = require('fs');
46 var async = require('async');
48 function findFile(filepath, callback) {
49 fs.readFile(filepath, {encoding: 'utf-8'}, function(error, result){
50 if (error) callback(false);
51 else callback(regex.test(result));
55 async.detect(filepaths, findFile, function(result){
56 if (!result) callback(nothing)();
57 else callback(just(result))();
61 """ :: forall eff. Fn6 (Maybe String)
62 (String -> Maybe String)
65 (Error -> Eff (fs :: FS | eff) Unit)
66 (Maybe String -> Eff (fs :: FS | eff) Unit)
67 (Eff (fs :: FS | eff) Unit)