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
PortabilityPOSIX
Safe HaskellNone
LanguageHaskell2010

Polysemy.FS.Scoped

Description

The behavior about file access mode conforms IOMode and openFile.

Synopsis

Documentation

type Access format accessMode es r b = forall a. (forall handle. Sem (ScopedFile (Mode format accessMode) es b handle ': r) a) -> Sem r a Source #

A type signature of interpreters for scoped file access.

data AccessMode Source #

Constructors

ReadAccess

read only access mode (ReadMode)

WriteAccess

write only access mode (WriteMode)

AppendAccess

append access mode (AppendMode)

RwAccess

read write access mode (ReadWriteMode)

data Format Source #

Constructors

TextFormat 
BytesFormat 

data Mode (fmt :: Format) (acc :: AccessMode) Source #

A tag type that represents file open mode in POSIX.

scopedFile :: forall accessMode format es b r handle a. (Member (ScopedFile (Mode format accessMode) es b handle) r, KnownList es) => Path b File -> Sem (Append es (Bundle es ': (Input (Path b File) ': r))) a -> Sem r a Source #

scopedFile_single :: forall accessMode format e es b r handle. (Member (ScopedFile (Mode format accessMode) es b handle) r, Member e es) => Path b File -> InterpretersFor '[e, Input (Path b File)] r Source #

scopedFile_bundle :: forall accessMode format es b r handle. Member (ScopedFile (Mode format accessMode) es b handle) r => Path b File -> InterpretersFor '[Bundle es, Input (Path b File)] r Source #

rewriteScopedFile :: (Sem (ScopedP (Path b File) handle (Bundle es) ': r) a -> Sem (ScopedP (Path b' File) handle' (Bundle es') ': r) a) -> Sem (ScopedFile mode es b handle ': r) a -> Sem (ScopedFile mode es' b' handle' ': r) a Source #

transformerToRewriter :: (Sem (e0 ': (e1 ': r)) a -> Sem (e1 ': r) a) -> Sem (e0 ': r) a -> Sem (e1 ': r) a Source #

rewriterToTransformer :: (forall r. Sem (e0 ': r) a -> Sem (e1 ': r) a) -> forall r. Member e1 r' => Sem (e0 ': r') a -> Sem r' a Source #

data ScopedFile mode es b handle m a Source #

sendBundle_ :: forall es r a. KnownList es => Sem (Append es (Bundle es ': r)) a -> Sem (Bundle es ': r) a Source #

runScopedFile :: KnownList es => (forall x. Path b File -> (handle -> Sem r x) -> Sem r x) -> (handle -> InterpretersFor es r) -> (forall handle'. Sem (ScopedFile mode es b handle' ': r) a) -> Sem r a Source #