dhall-text-shell ================ `dhall-text-shell` requires the expression to be `Text`. But what if it was able to also render expressions of type `(Text -> Text) -> Text`, and be given a shell argument as the `Text -> Text` ? ```dhall -- testfile.dhall let text = https://raw.githubusercontent.com/dhall-lang/dhall-lang/v21.1.0/Prelude/Text/package.dhall in \(f : Text -> Text) -> text.concatMapSep "," Text f [ "hello", "world" ] ``` Would give: ``` $ dhall-text-shell --file testfile.dhall --argCmd cat hello,world $ dhall-text-shell --file testfile.dhall --argCmd "tr '[:lower:]' '[:upper:]'" HELLO,WORLD $ dhall-text-shell --file testfile.dhall --argCmd "pandoc -f markdown -t html"

hello

,

world

$ dhall-text-shell --file testfile.dhall --argCmd "md5sum -z" 5d41402abc4b2a76b9719d911017c592 -,7d793037a0760186574b0282f2f435e7 - ``` Error messages: ``` $ dhall-text-shell --file testfile.dhall Error: Expression doesn't match annotation - Text + .. -> .. (a function type) $ dhall-text-shell --file testfile.dhall --argCmd cat --argCmd cat Error: Expression doesn't match annotation - .. -> .. (a function type) + Text ``` Supports multiple arguments as well: ```dhall -- testfile2.dhall let text = https://raw.githubusercontent.com/dhall-lang/dhall-lang/v21.1.0/Prelude/Text/package.dhall in \(f : Text -> Text) -> \(g : Text -> Text) -> text.concatMapSep "," Text f [ "hello", g "world" ] ``` ``` $ dhall-text-shell --file testfile2.dhall --argCmd cat --argCmd "tr '[:lower:]' '[:upper:]'" hello,WORLD ``` This is essentially a very minimal "FFI" for dhall, since it doesn't require extending anything in the language. It just requires you to parameterize your program on that ffi function. Note that for this to work meaningfully, your shell command must be "pure": it must return the same stdout for any stdin, and shouldn't observably affect the world every time it is run.