#!/usr/bin/env sh
# -*- wisp -*-
guile -L $(dirname $(dirname $(realpath "$0"))) -c '(import (wisp-scheme) (language wisp spec))'
exec guile -L $(dirname $(dirname $(realpath "$0"))) --language=wisp -e '(@@ (examples argparse) main)' -s "$0" "$@"
; !#

;; Argument parser
;; 
;; Status: draft (basic interface works, but does not do something useful yet)
;; 
;; plan: (TODO)
;;   - simplest usage: (import (examples argparse))(let ((args (parse-args))) (write args))
;;   - with setup: (import (examples argparse))
;;                 (let* ((parser (setup-args #:help "foo"))
;;                        (args (parse-args #:parser parser)))
;;                       (write args))
;;   - implement -h | --help | --usage and -V | --version, set up automatically and improved via setup-args.

define-module : examples argparse
    . #:export : args-parse args-setup

import : ice-9 optargs

define* : args-parse #:optional args #:key parser
          if : equal? #f args
               command-line
               . args

define* : args-setup #:key (help #f)
        . #f

define : main args
         let : : args : args-parse args
           write args
         let*
            : parser : args-setup #:help "argparse"
              args : args-parse #:parser parser
            write args
         let*
            : parser : args-setup #:help "argparse"
              args : args-parse args #:parser parser
            write args