lens-process-0.2.0.2: Optics for system processes

Copyright2019 Emily Pillmore
LicenseBSD
MaintainerEmily Pillmore <emilypi@cohomolo.gy>
StabilityExperimental
PortabilityTypeFamilies, Rank2Types
Safe HaskellSafe
LanguageHaskell2010

System.Process.Lens.StdStream

Contents

Description

This module provides the associated optics and combinators for working with StdStream objects. StdStream consists of four cases, for which we provide prisms and classy variants, as well as a single Review for the only non-trivial Review - UseHandle.

Synopsis

Prisms

_Inherit :: Prism' StdStream StdStream Source #

A prism into the Inherit structure of a StdStream

Examples:

>>> _Inherit # CreatePipe
Inherit

_UseHandle :: Prism' StdStream Handle Source #

A prism into the UseHandle structure's Handle for a StdStream

Examples:

>>> _UseHandle # System.stdin
UseHandle {handle: <stdin>}

_CreatePipe :: Prism' StdStream StdStream Source #

A prism into the CreatePipe structure of a StdStream

Examples:

>>> _CreatePipe # Inherit
CreatePipe

_NoStream :: Prism' StdStream StdStream Source #

A prism into the NoStream structure of a StdStream

Examples:

>>> _NoStream # CreatePipe
NoStream

Classy Prisms

class IsInherit a where Source #

Class constraint proving a type has a prism into an Inherit structure. Any StdStream will have a prism into Inherit - it is just an overwrite to Inherit

class IsUseHandle a where Source #

Class constraint proving a type has a prism into a Handle via a UseHandle structure.

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

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.

Combinators

usehandleOf :: IsUseHandle a => Handle -> a Source #

Inject a handle into something with a prism into the handle

Examples:

>>> usehandleOf @StdStream System.stdin
UseHandle {handle: <stdin>}

inheriting :: IsInherit a => Lens' a StdStream -> a -> a Source #

Given a lens into a StdStream, overwrite to Inherit so that the stream inherits from its parent process

Examples:

>>> inheriting ($) CreatePipe
Inherit

piping :: IsCreatePipe a => Lens' a StdStream -> a -> a Source #

Given a lens into a StdStream, overwrite to CreatePipe.

Examples:

>>> piping ($) NoStream
CreatePipe

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.stdout
UseHandle {handle: <stdin>}
>>> handling ($) System.stdin NoStream
NoStream
>>> handling ($) System.stdin Inherit
Inherit

nostreaming :: IsNoStream a => Lens' a StdStream -> a -> a Source #

Given a lens into a StdStream, set to NoStream

Examples:

>>> nostreaming ($) Inherit
NoStream