Next: Defining a Process, Previous: Installation, Up: Top [Contents][Index]
A Simple Workflow
To get a little taste of what the workflow language looks like, let’s start by writing a simple workflow.
Here is a simple workflow example:
process greet packages "hello" # { hello } process sleep packages "coreutils" # { echo "Sleeping..." sleep 10 } process eat (with something) name string-append "eat-" something # { echo "Eating {{something}}" } process bye # { echo "Farewell, world!" } workflow simple-wisp processes define eat-fruit eat "fruit" define eat-veges eat "vegetables" graph eat-fruit -> greet eat-veges -> greet sleep -> eat-fruit eat-veges bye -> sleep
This white-space sensitive syntax is called Wisp and if you’re familiar with Python or YAML you should feel right at home. To use this syntax simply save your workflow to a file ending on .w, .wisp, or .gwl.
The workflow language really is a domain specific language (DSL) embedded in Guile Scheme, so if you’re a Lisper you may prefer to write your workflows directly in Scheme while basking in its parenthetical glow:
(define-public greet (make-process (name "greet") (packages (list "hello")) (procedure '(system "hello")))) (define-public sleep (make-process (name "sleep") (packages (list "coreutils")) (procedure '(begin (display "Sleeping...\n") (system "sleep 10"))))) (define-public (eat something) (make-process (name (string-append "eat-" something)) (procedure `(format #t "Eating ~a\n" ,something)))) (define-public bye (make-process (name "bye") (procedure '(display "Farewell, world!\n")))) (make-workflow (name "simple") (processes (let ((eat-fruit (eat "fruit")) (eat-veges (eat "vegetables"))) (graph (eat-fruit -> greet) (eat-veges -> greet) (sleep -> eat-fruit eat-veges) (bye -> sleep)))))
Everything you can express in Scheme can also be expressed with the Wisp syntax, so the choice is down to personal preference.
Next: Defining a Process, Previous: Installation, Up: Top [Contents][Index]