module System.Directory import public System.File public exportdata DirPtr : Type where toFileError : Int -> FileErrortoFileError 1 = FileReadErrortoFileError 2 = FileWriteErrortoFileError 3 = FileNotFoundtoFileError 4 = PermissionDeniedtoFileError x = GenericFileError (x - 256) fpure : Either Int a -> IO (Either FileError a)fpure (Left err) = pure (Left (toFileError err))fpure (Right x) = pure (Right x) %foreign "scheme:blodwen-current-directory"prim_currentDir : PrimIO String %foreign "scheme:blodwen-change-directory"prim_changeDir : String -> PrimIO Int %foreign "scheme:blodwen-create-directory"prim_createDir : String -> PrimIO (Either Int ()) %foreign "scheme:blodwen-open-directory"prim_openDir : String -> PrimIO (Either Int DirPtr) %foreign "scheme:blodwen-close-directory"prim_closeDir : DirPtr -> PrimIO () %foreign "scheme:blodwen-next-dir-entry"prim_dirEntry : DirPtr -> PrimIO (Either Int String) exportdata Directory : Type where MkDir : DirPtr -> Directory exportcreateDir : String -> IO (Either FileError ())createDir dir = do ok <- primIO (prim_createDir dir) fpure ok exportchangeDir : String -> IO BoolchangeDir dir = do ok <- primIO (prim_changeDir dir) pure (ok /= 0) exportcurrentDir : IO StringcurrentDir = primIO prim_currentDir exportdirOpen : String -> IO (Either FileError Directory)dirOpen d = do res <- primIO (prim_openDir d) fpure (map MkDir res) exportdirClose : Directory -> IO ()dirClose (MkDir d) = primIO (prim_closeDir d) exportdirEntry : Directory -> IO (Either FileError String)dirEntry (MkDir d) = do res <- primIO (prim_dirEntry d) fpure res
module System.Directory
import public System.File
public export
data DirPtr : Type where
toFileError : Int -> FileError
toFileError 1 = FileReadError
toFileError 2 = FileWriteError
toFileError 3 = FileNotFound
toFileError 4 = PermissionDenied
toFileError x = GenericFileError (x - 256)
fpure : Either Int a -> IO (Either FileError a)
fpure (Left err) = pure (Left (toFileError err))
fpure (Right x) = pure (Right x)
%foreign "scheme:blodwen-current-directory"
prim_currentDir : PrimIO String
%foreign "scheme:blodwen-change-directory"
prim_changeDir : String -> PrimIO Int
%foreign "scheme:blodwen-create-directory"
prim_createDir : String -> PrimIO (Either Int ())
%foreign "scheme:blodwen-open-directory"
prim_openDir : String -> PrimIO (Either Int DirPtr)
%foreign "scheme:blodwen-close-directory"
prim_closeDir : DirPtr -> PrimIO ()
%foreign "scheme:blodwen-next-dir-entry"
prim_dirEntry : DirPtr -> PrimIO (Either Int String)
export
data Directory : Type where
MkDir : DirPtr -> Directory
export
createDir : String -> IO (Either FileError ())
createDir dir
= do ok <- primIO (prim_createDir dir)
fpure ok
export
changeDir : String -> IO Bool
changeDir dir
= do ok <- primIO (prim_changeDir dir)
pure (ok /= 0)
export
currentDir : IO String
currentDir = primIO prim_currentDir
export
dirOpen : String -> IO (Either FileError Directory)
dirOpen d
= do res <- primIO (prim_openDir d)
fpure (map MkDir res)
export
dirClose : Directory -> IO ()
dirClose (MkDir d) = primIO (prim_closeDir d)
export
dirEntry : Directory -> IO (Either FileError String)
dirEntry (MkDir d)
= do res <- primIO (prim_dirEntry d)
fpure res