37 lines
1.9 KiB
Racket
37 lines
1.9 KiB
Racket
#lang typed/racket
|
|
(require "typed-untyped.rkt")
|
|
(define-typed/untyped-modules
|
|
(provide first-value second-value third-value fourth-value fifth-value
|
|
sixth-value seventh-value eighth-value ninth-value tenth-value
|
|
cons→values
|
|
(rename-out [cons→values cons->values]))
|
|
|
|
(define-syntax-rule (define-value-getter name v ... last-v)
|
|
(define-syntax-rule (name expr)
|
|
(call-with-values (λ () expr) (λ (v ... last-v . rest) last-v))))
|
|
|
|
(define-value-getter first-value v1)
|
|
(define-value-getter second-value v1 v2)
|
|
(define-value-getter third-value v1 v2 v3)
|
|
(define-value-getter fourth-value v1 v2 v3 v4)
|
|
(define-value-getter fifth-value v1 v2 v3 v4 v5)
|
|
(define-value-getter sixth-value v1 v2 v3 v4 v5 v6)
|
|
(define-value-getter seventh-value v1 v2 v3 v4 v5 v6 v7)
|
|
(define-value-getter eighth-value v1 v2 v3 v4 v5 v6 v7 v8)
|
|
(define-value-getter ninth-value v1 v2 v3 v4 v5 v6 v7 v8 v9)
|
|
(define-value-getter tenth-value v1 v2 v3 v4 v5 v6 v7 v8 v9 v10)
|
|
|
|
(module+ test
|
|
(require typed/rackunit)
|
|
(check-equal? (first-value (values 1 2 3 4 5 6 7 8 9 10 11 12 13 14)) 1)
|
|
(check-equal? (second-value (values 1 2 3 4 5 6 7 8 9 10 11 12 13 14)) 2)
|
|
(check-equal? (third-value (values 1 2 3 4 5 6 7 8 9 10 11 12 13 14)) 3)
|
|
(check-equal? (fourth-value (values 1 2 3 4 5 6 7 8 9 10 11 12 13 14)) 4)
|
|
(check-equal? (fifth-value (values 1 2 3 4 5 6 7 8 9 10 11 12 13 14)) 5)
|
|
(check-equal? (sixth-value (values 1 2 3 4 5 6 7 8 9 10 11 12 13 14)) 6)
|
|
(check-equal? (seventh-value (values 1 2 3 4 5 6 7 8 9 10 11 12 13 14)) 7)
|
|
(check-equal? (eighth-value (values 1 2 3 4 5 6 7 8 9 10 11 12 13 14)) 8)
|
|
(check-equal? (ninth-value (values 1 2 3 4 5 6 7 8 9 10 11 12 13 14)) 9)
|
|
(check-equal? (tenth-value (values 1 2 3 4 5 6 7 8 9 10 11 12 13 14)) 10))
|
|
|
|
(define #:∀ (A B) (cons→values [x : (Pairof A B)]) (values (car x) (cdr x)))) |