ianmackenzie / elm-script

Experimental command-line scripting for Elm
34 stars 4 forks source link

Add stream support #2

Open ianmackenzie opened 6 years ago

ianmackenzie commented 6 years ago

Have InputStream and OutputStream types that allow streaming I/O on files, standard in, standard out etc.

Allow converting File values into corresponding streams:

File.toInputStream : File (Read p) -> InputStream
File.toOutputStream : File (Write p) -> OutputStream

Add stdin and stdout to Context:

type alias Context =
    { arguments : List String
    , ...
    , stdin : InputStream
    , stdout : OutputStream
    }

Have Stream module with various ways to read from/write to streams:

Stream.write : String -> OutputStream -> Script Stream.Error ()
Stream.read : InputStream -> Script Stream.Error String

Stream.read might need to be a bit more sophisticated to be able to cleanly detect when the end of the stream has been reached...

ianmackenzie commented 4 years ago

Perhaps simpler: expose stdin and stdout as File objects?