Posted to tcl by bairui at Thu Jul 19 08:45:41 GMT 2018view pretty

# clojure style thread macro
# By default, threads at first argument, otherwise at @@ designations
proc -> {var args} {
  set body {}
  foreach script $args {
    if {[regexp @@ $script]} {
      set pos @@
    } else {
      set pos { }
    }
    set script "\[$script\]"
    if {$body eq {}} {
      set body [regsub $pos $script $$var]
    } else {
      set body [regsub $pos $script " $body "]
    }
  }
  tailcall subst $body
}

proc heredoc {doc} {
  # tailcall subst [join [lmap line [split [string trim $body] \n] {string trim $line}] \n]
  tailcall subst [-> doc {string trim @@} {split \n} {lmap line @@ {string trim $line}} {join \n}]
}

proc usage {argv0 argv} {
  set usageError [heredoc {
    \  ERROR: [file tail ${argv0}]
    \    ?--auto-update?
    \    --rolback PIPTYPE PIPPACKAGE
  }]
  puts $usageError
}

usage $argv0 $argv