Исправление monk, (текущая версия) :
Это же в рантайме?
Контракты - да. Зато произвольные.
В Typed Racket можно и при компиляции. Что-то вроде
(: sort (All (a) (-> (Vectorof a) (SortedVector a)))
(:make0-10 (-> Int Int0-10))
(define (make0-10 x) x) ;; можно сделать runtime проверку или просто пообещать, что сюда будут попадать только от 0 до 10
(: test (-> (SortedVector Int0-10) Void))
(test (sort (vector (make0-10 2) (make0-10 3) (make0-10 5))))
Исходная версия monk, :
Это же в рантайме?
Контракты - да. Зато произвольные.
В Typed Racket можно и при компиляции. Что-то вроде
(: sort (All (a) (-> (Vectorof a) (SortedVector a)))
(:make0-10 (-> Int Int0-10))
(: test (-> (SortedVector Int0-10) Void))
(test (sort (vector (make0-10 2) (make0-10 3) (make0-10 5))))