0 | module Data.Swirl.System
3 | import public Data.Swirl
4 | import Data.Swirl.File
6 | import public Language.Implicits.IfUnsolved
9 | import public System.File.Error
17 | runSysCmdOLn : HasIO io => (cmd : List String) -> Swirl io FileError Int String
18 | runSysCmdOLn cmd = mapFst fst $
bracket'
19 | (succeedOrFail.by $
popen cmd Read)
20 | (succeed.by . pclose)
23 | trimRLn : String -> String
25 | let S n = length str
27 | if assert_total $
strIndex str (cast n) == '\n'
35 | runSysCmdO : HasIO io => (cmd : List String) -> Swirl io FileError Int String
36 | runSysCmdO = map trimRLn . filter (/= "") . runSysCmdOLn
41 | runSysCmdI : HasIO io => (cmd : List String) -> Swirl io e r String -> Swirl io (Either e FileError) (r, Int) Void
42 | runSysCmdI cmd sw = mapFst swap $
bracket'
43 | (mapError Right $
succeedOrFail.by $
popen cmd WriteTruncate)
44 | (succeed.by . pclose)
45 | $
\inF => squashOuts' $
sw <&> succeedOrFail.by . fPutStr inF
48 | runSysCmdILn : HasIO io => (cmd : List String) -> Swirl io e r String -> Swirl io (Either e FileError) (r, Int) Void
49 | runSysCmdILn cmd = runSysCmdI cmd . map (++ "\n")