{"size": 881, "ext": "rktl", "max_stars_repo_path": "pkgs/racket-benchmarks/tests/racket/benchmarks/shootout/typed/cheapconcurrency.rktl", "max_stars_repo_name": "lkh01/racket", "max_stars_repo_stars_event_min_datetime": "2018-07-05T21:18:24.000Z", "max_stars_repo_stars_event_max_datetime": "2021-06-04T14:48:37.000Z", "max_issues_repo_path": "pkgs/racket-benchmarks/tests/racket/benchmarks/shootout/typed/cheapconcurrency.rktl", "max_issues_repo_name": "lkh01/racket", "max_issues_repo_issues_event_min_datetime": "2017-05-10T07:33:20.000Z", "max_issues_repo_issues_event_max_datetime": "2018-07-19T15:49:46.000Z", "max_forks_repo_path": "pkgs/racket-benchmarks/tests/racket/benchmarks/shootout/typed/cheapconcurrency.rktl", "max_forks_repo_name": "lkh01/racket", "max_forks_repo_forks_event_min_datetime": "2016-04-25T11:47:57.000Z", "max_forks_repo_forks_event_max_datetime": "2017-05-09T14:52:48.000Z"}
{"max_stars_count": 4, "max_issues_count": 9, "max_forks_count": 3, "avg_line_length": 36.7083333333, "max_line_length": 96, "alphanum_fraction": 0.5221339387}
(require scheme/cmdline)

(: generate ((Channelof Natural) Natural -> (Channelof Natural)))
(define (generate receive-ch n)
  (if (zero? n)
      receive-ch
      (let: ([ch : (Channelof Natural) (make-channel)])
        (thread (lambda ()
                  (let: loop : Void ()
                    (channel-put ch (add1 (channel-get receive-ch)))
                    (loop))))
        (generate ch (sub1 n)))))

(let ([n (command-line #:args (n) (assert (string->number (assert n string?)) exact-integer?))])
  (let*: ([start-ch : (Channelof Natural) (make-channel)]
          [end-ch : (Channelof Natural) (generate start-ch 500)])
    (let: loop : Void ([n : Integer n][total : Integer 0])
      (if (zero? n)
          (printf "~a\n" total)
          (begin
            (channel-put start-ch 0)
            (loop (sub1 n)
                  (+ total (channel-get end-ch))))))))
