polysemy-scoped-fs-0.1.0.0: Well-typed filesystem operation effects.
Copyright(c) Hisaket VioletRed 2022
LicenseAGPL-3.0-or-later
Maintainerhisaket@outlook.jp
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

Polysemy.FS.Scoped.Oneshot

Description

Unscoped file access and interop with polysemy-fs package.

Synopsis

Documentation

readFile :: (Member (ScopedFile (Mode fmt ReadAccess) es b handle) r, Member (Read ToEnd i) es) => Path b File -> Sem r i Source #

overwriteFile :: (Member (ScopedFile (Mode fmt WriteAccess) es b handle) r, Member (Overwrite o) es) => Path b File -> o -> Sem r () Source #

extendFile :: (Member (ScopedFile (Mode fmt WriteAccess) es b handle) r, Member (Extend o) es) => Path b File -> o -> Sem r () Source #

appendFile :: (Member (ScopedFile (Mode fmt AppendAccess) es b handle) r, Member (Append o) es) => Path b File -> o -> Sem r () Source #

readFile_single :: Member (ScopedFile (Mode fmt ReadAccess) '[Read ToEnd i] b handle) r => Path b File -> Sem r i Source #

overwriteFile_single :: Member (ScopedFile (Mode fmt WriteAccess) '[Overwrite o] b handle) r => Path b File -> o -> Sem r () Source #

extendFile_single :: Member (ScopedFile (Mode fmt WriteAccess) '[Extend o] b handle) r => Path b File -> o -> Sem r () Source #

appendFile_single :: Member (ScopedFile (Mode fmt AppendAccess) '[Append o] b handle) r => Path b File -> o -> Sem r () Source #

fsReadToScopedRead :: forall handle0 handle1 handle2 handle3 r a. Members '[ScopedFile (Mode BytesFormat ReadAccess) '[ReadToEnd] Abs handle0, ScopedFile (Mode BytesFormat ReadAccess) '[ReadToEnd] Rel handle1, ScopedFile (Mode TextFormat ReadAccess) '[ReadToEnd] Abs handle2, ScopedFile (Mode TextFormat ReadAccess) '[ReadToEnd] Rel handle3, Error PathException] r => Sem (FSRead ': r) a -> Sem r a Source #

Example:

>>> import Polysemy.Resource ( resourceToIO )
>>> import qualified Polysemy.FS.Scoped.Text as ST
>>> import qualified Polysemy.FS.Scoped.ByteString as SB
>>> import Polysemy.Scoped.Path ( weakenScopedP )
>>> import Polysemy.FS.Scoped ( rewriteScopedFile, transformerToRewriter )
>>> import Polysemy ( runFinal, embedToFinal, subsume_ )
>>> import Polysemy.Error ( errorToIOFinal )
>>> :{
    fsReadToIO :: Sem '[FSRead] a -> IO (Either PathException a)
    fsReadToIO m =
        runFinal $ embedToFinal $ resourceToIO $ errorToIOFinal
            $   ST.readAccessToIO $ rewriteScopedFile (transformerToRewriter $ weakenScopedP @'[SAT.ReadToEnd] @_ @(Path Abs _))
            $   ST.readAccessToIO $ rewriteScopedFile (transformerToRewriter $ weakenScopedP @'[SAT.ReadToEnd] @_ @(Path Rel _))
            $   SB.readAccessToIO $ rewriteScopedFile (transformerToRewriter $ weakenScopedP @'[SAB.ReadToEnd] @_ @(Path Abs _))
            $   SB.readAccessToIO $ rewriteScopedFile (transformerToRewriter $ weakenScopedP @'[SAB.ReadToEnd] @_ @(Path Rel _))
            $   fsReadToScopedRead
            $   subsume_ m
:}