diff options
-rw-r--r-- | ccwl/ccwl.scm | 4 | ||||
-rw-r--r-- | doc/ccwl.skb | 9 | ||||
-rw-r--r-- | doc/identity-construct.scm | 14 |
3 files changed, 25 insertions, 2 deletions
diff --git a/ccwl/ccwl.scm b/ccwl/ccwl.scm index d00609d..bbc5de1 100644 --- a/ccwl/ccwl.scm +++ b/ccwl/ccwl.scm @@ -625,7 +625,7 @@ supplied input keys." output keys and a list of steps. INPUT-KEYS is a list of supplied input keys. Keys are represented by <key> objects, and steps are represented by <step> objects." - (syntax-case x (pipe tee rename scatter scatter-cross scatter-nested-cross) + (syntax-case x (pipe tee identity rename scatter scatter-cross scatter-nested-cross) ;; pipe ((pipe expressions ...) (foldn (lambda (expression input-keys steps) @@ -638,6 +638,8 @@ represented by <step> objects." ((tee expressions ...) (append-mapn (cut collect-steps <> input-keys) #'(expressions ...))) + ((identity) + (values input-keys (list))) ;; rename keys (base case) ((rename new-key old-key) (begin diff --git a/doc/ccwl.skb b/doc/ccwl.skb index 726b405..cb78fd5 100644 --- a/doc/ccwl.skb +++ b/doc/ccwl.skb @@ -382,7 +382,14 @@ the external CWL workflow.] (scheme-source "doc/external-cwl-workflow.scm") [,(file "echo.cwl") is defined as] ;; TODO: Syntax highlight doc/external-cwl-workflow.cwl. - (prog :line #f (source :file "doc/echo.cwl"))))) + (prog :line #f (source :file "doc/echo.cwl")))) + (section :title [The ,(code [identity]) construct] + :ident "identity-construct" + (p [Sometimes, it is helpful for a step to simply copy all input +keys forward to the output. This is what the ,(code [identity]) +construct is for. An example follows.] + (scheme-source "doc/identity-construct.scm") + (image :file "doc/identity-construct.png")))) (chapter :title [Contributing] :ident "chapter-contributing" diff --git a/doc/identity-construct.scm b/doc/identity-construct.scm new file mode 100644 index 0000000..626568f --- /dev/null +++ b/doc/identity-construct.scm @@ -0,0 +1,14 @@ +(define print-message + (command #:inputs (message #:type string) + #:run "echo" message + #:outputs (printed-message #:type stdout))) + +(define print-file + (command #:inputs (file #:type File) + #:run "cat" file + #:outputs (printed-file #:type stdout))) + +(workflow ((message #:type string)) + (pipe (print-message #:message message) + (tee (print-file #:file printed-message) + (identity)))) |