18 lines
410 B
Racket
18 lines
410 B
Racket
#lang typed/racket
|
|
|
|
(struct: (A) Queue ([elem : A]))
|
|
|
|
(: qmap :
|
|
(All (A B ...)
|
|
(case->
|
|
((A -> A) (Queue A) -> (Queue A))
|
|
((A B ... B -> A) (Queue A) (Queue B) ... B -> (Queue A)))))
|
|
(define qmap
|
|
(pcase-lambda:
|
|
(A B ...)
|
|
[([func : (A -> A)] [deq : (Queue A)])
|
|
deq]
|
|
[([func : (A B ... B -> A)]
|
|
[deq : (Queue A)] . [deqs : (Queue B) ... B])
|
|
deq]))
|