(define $SH.gen-input (lambda [$sopts $copts] (if (io (eof?)) {} (let {[$x (io (TSV.read-line sopts copts))]} (seq x {x @(SH.gen-input sopts copts)}))))) (define $TSV.read-line (lambda [$sopts $copts] (do {[$line (read-line)]} (let {[$fs (S.split "\t" line)]} (letrec {[$fn-s (match-lambda [(list (list integer)) (list string)] {[[ $fs] fs] [[> $opts'> ] (fn-s opts' {@hs @(map (lambda [$t] (S.concat {"\"" t "\""})) ts)})] [[>> $opts'> >] (fn-s opts' {@hs (S.concat {"\"" mf "\""}) @ts})] [[>> $opts'> >] (fn-s opts' {@hs @(map (lambda [$m] (S.concat {"\"" m "\""})) ms) @ts})] [[>> $opts'> _] (fn-s {{m} @opts'} fs)] [[_ _] fs] })] [$fn-c (match-lambda [(list (list integer)) (list string)] {[[ $fs] fs] [[> $opts'> >>] (fn-c opts' {@hs (S.concat {"{" mf "}"})})] [[> $opts'> >>] (fn-c opts' {@hs (S.append "{" mf) @ms (S.append tf "}")})] [[>> $opts'> >] (fn-c opts' {@hs (S.concat {"{" mf "}"}) @ts})] [[>> $opts'> >>>] (fn-c opts' {@hs (S.append "{" mf) @ms (S.append nf "}") @ts})] [[>> $opts'> _] (fn-c {{m} @opts'} fs)] [[_ _] fs] })]} (return (read-tsv (S.intercalate "\t" (fn-c copts (fn-s sopts fs)))))))))) (define $TSV.show show-tsv)