| Copyright | 2019 Emily Pillmore |
|---|---|
| License | BSD |
| Maintainer | Emily Pillmore <emilypi@cohomolo.gy> |
| Stability | Experimental |
| Portability | TypeFamilies, RankNTypes |
| Safe Haskell | Safe |
| Language | Haskell2010 |
System.Process.Lens
Description
This module provides all of the optical exports, as well ask any associated
combinators. For just the optics, see Optics, or
if you are in need of something lighter weight, just for working with a
CreateProcess in terms of getters and setters, see https://hackage.haskell.org/package/microlens
For more information on usage and how to work with lenses, see http://github.com/ekmett/lens/wiki and the tests for example uses. You can also ask questions on Freenode in the #haskell-lens channel.
Synopsis
- data ProcessHandler = ProcessHandler {}
- _ShellCommand :: Prism' CmdSpec String
- _RawCommand :: Prism' CmdSpec (FilePath, [String])
- arguments :: IsRaw a => Traversal' a [String]
- _Inherit :: Prism' StdStream StdStream
- _UseHandle :: Prism' StdStream Handle
- _CreatePipe :: Prism' StdStream StdStream
- _NoStream :: Prism' StdStream StdStream
- _Handler :: Iso' ProcessHandler (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle)
- cmdspec_ :: Lens' CreateProcess CmdSpec
- cwd_ :: Lens' CreateProcess (Maybe FilePath)
- env_ :: Lens' CreateProcess (Maybe [(String, String)])
- stdin_ :: Lens' CreateProcess StdStream
- stdout_ :: Lens' CreateProcess StdStream
- stderr_ :: Lens' CreateProcess StdStream
- closefds :: Lens' CreateProcess Bool
- creategroup :: Lens' CreateProcess Bool
- delegatectlc :: Lens' CreateProcess Bool
- detachconsole :: Lens' CreateProcess Bool
- newsession :: Lens' CreateProcess Bool
- childgroup :: Lens' CreateProcess (Maybe CGid)
- childuser :: Lens' CreateProcess (Maybe CUid)
- useprocessjobs :: Lens' CreateProcess Bool
- hstdin :: Lens' ProcessHandler (Maybe Handle)
- hstdout :: Lens' ProcessHandler (Maybe Handle)
- hstderr :: Lens' ProcessHandler (Maybe Handle)
- hhandle :: Lens' ProcessHandler ProcessHandle
- class IsRaw a where
- class IsShell a where
- class IsInherit a where
- class IsUseHandle a where
- _UsesHandle :: Prism' a Handle
- class IsCreatePipe a where
- _CreatesPipe :: Prism' a StdStream
- class IsNoStream a where
- _NoStreams :: Prism' a StdStream
- class HasStdin a where
- class HasStdout a where
- class HasStderr a where
- inheriting :: IsInherit a => Lens' a StdStream -> a -> a
- piping :: IsCreatePipe a => Lens' a StdStream -> a -> a
- handling :: IsUseHandle a => Lens' a StdStream -> Handle -> a -> a
- nostreaming :: IsNoStream a => Lens' a StdStream -> a -> a
- arguing :: IsRaw a => String -> a -> a
- rawOf :: IsRaw a => FilePath -> [String] -> a
- shellOf :: IsShell a => String -> a
- usehandleOf :: IsUseHandle a => Handle -> a
Data
data ProcessHandler Source #
A convenient handler for the output of a createProcess call.
This data containes 4 components:
- a handle to stdin if it was requested
- a handle to stdout if it was requested
- a handle to stderr if it was requested
- a process handle, containing a pid lock, information regarding ctcl-c delegation, and closed/open handle status info.
Prisms
_ShellCommand :: Prism' CmdSpec String Source #
A prism into the ShellCommand case of a CmdSpec
Examples:
>>>_ShellCommand # "ls -l"ShellCommand "ls -l"
>>>ShellCommand "ls -l" ^? _ShellCommandJust "ls -l"
>>>RawCommand "/bin/ls" ["-l"] ^? _ShellCommandNothing
_RawCommand :: Prism' CmdSpec (FilePath, [String]) Source #
A prism into the RawCommand case of a CmdSpec
Examples:
>>>RawCommand "/bin/ls" ["-l"] ^? _RawCommandJust ("/bin/ls",["-l"])
>>>RawCommand "/bin/ls" ["-l"] ^? _ShellCommandNothing
>>>RawCommand "/bin/ls" ["-l"] ^. _RawCommand . _1"/bin/ls"
>>>RawCommand "/bin/ls" ["-l"] ^. _RawCommand . _2["-l"]
arguments :: IsRaw a => Traversal' a [String] Source #
Traversal' into the arguments of a command
Examples:
>>>RawCommand "/bin/ls" ["-l"] ^. arguments["-l"]
Isos
_Handler :: Iso' ProcessHandler (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle) Source #
An iso between the ProcessHandler data and its product representation
Lenses
cmdspec_ :: Lens' CreateProcess CmdSpec Source #
Lens into the cmdspec entry of the CreateProcess record
cwd_ :: Lens' CreateProcess (Maybe FilePath) Source #
Lens into the cwd entry of the CreateProcess record
env_ :: Lens' CreateProcess (Maybe [(String, String)]) Source #
Lens into the env entry of the CreateProcess record
stdin_ :: Lens' CreateProcess StdStream Source #
Lens into the std_in entry of the CreateProcess record
stdout_ :: Lens' CreateProcess StdStream Source #
Lens into the std_out entry of the CreateProcess record
stderr_ :: Lens' CreateProcess StdStream Source #
Lens into the std_err entry of the CreateProcess record
closefds :: Lens' CreateProcess Bool Source #
Lens into the close_fds entry of the CreateProcess record
creategroup :: Lens' CreateProcess Bool Source #
Lens into the create_group entry of the CreateProcess record
delegatectlc :: Lens' CreateProcess Bool Source #
Lens into the delegate_ctlc entry of the CreateProcess record
detachconsole :: Lens' CreateProcess Bool Source #
Lens into the detach_console entry of the CreateProcess record
newsession :: Lens' CreateProcess Bool Source #
Lens into the new_session entry of the CreateProcess record
childgroup :: Lens' CreateProcess (Maybe CGid) Source #
Lens into the child_group entry of the CreateProcess record
childuser :: Lens' CreateProcess (Maybe CUid) Source #
Lens into the child_user entry of the CreateProcess record
useprocessjobs :: Lens' CreateProcess Bool Source #
Lens into the use_process_jobs entry of the CreateProcess record
hhandle :: Lens' ProcessHandler ProcessHandle Source #
A lens into the process handle
Classes
Classy prism into the raw command of a CmdSpec
Examples:
>>>f :: IsRaw a => a -> Maybe FilePath; f = preview (_Raw . _1)>>>f $ _RawCommand # ("/bin/ls", ["ls -l"])Just "/bin/ls"
class IsShell a where Source #
Classy prism into the shell command of a CmdSpec
Examples:
>>>f :: IsShell a => a -> Maybe String; f = preview _Shell>>>f $ _ShellCommand # "ls -l"Just "ls -l"
class IsUseHandle a where Source #
Methods
_UsesHandle :: Prism' a Handle Source #
Instances
| IsUseHandle StdStream Source # | |
Defined in System.Process.Lens.StdStream | |
class IsCreatePipe a where Source #
Class constraint proving a type has a prism into a Handle via
a UseHandle structure. Any StdStream will have a prism into
CreatePipe - it is just an overwrite to CreatePipe
Methods
_CreatesPipe :: Prism' a StdStream Source #
Instances
| IsCreatePipe StdStream Source # | |
Defined in System.Process.Lens.StdStream | |
class IsNoStream a where Source #
Class constraint proving a type has a prism into a Handle via
a UseHandle structure. Any StdStream will have a prism into
NoStream - it is just an overwrite to NoStream.
Methods
_NoStreams :: Prism' a StdStream Source #
Instances
| IsNoStream StdStream Source # | |
Defined in System.Process.Lens.StdStream | |
Combinators
handling :: IsUseHandle a => Lens' a StdStream -> Handle -> a -> a Source #
Given a lens into a StdStream and a handle, set the handle using
UseHandle. Note that this is the only really interesting case for anything
with a lens into a handle inculding StdStream.
Examples:
>>>handling ($) System.stdin $ UseHandle System.stdoutUseHandle {handle: <stdin>}
>>>handling ($) System.stdin NoStreamNoStream
>>>handling ($) System.stdin InheritInherit
nostreaming :: IsNoStream a => Lens' a StdStream -> a -> a Source #
arguing :: IsRaw a => String -> a -> a Source #
Append an argument to the argument list of a RawCommand
Examples:
>>>arguing "-h" $ RawCommand "/bin/ls" ["-l"]RawCommand "/bin/ls" ["-l","-h"]
>>>arguing "-h" (RawCommand "/bin/ls" ["-l"]) ^. arguments["-l","-h"]
rawOf :: IsRaw a => FilePath -> [String] -> a Source #
Lift a FilePath and list of arguments into a type via RawCommand
with a prism into the command
Examples:
>>>rawOf @CmdSpec "/bin/ls" ["-l"]RawCommand "/bin/ls" ["-l"]
shellOf :: IsShell a => String -> a Source #
Lift a String into a type via ShellCommand with a prism into the
Examples:
>>>shellOf @CmdSpec "ls"ShellCommand "ls"
usehandleOf :: IsUseHandle a => Handle -> a Source #
Inject a handle into something with a prism into the handle
Examples:
>>>usehandleOf @StdStream System.stdinUseHandle {handle: <stdin>}