Я пишу функцию, которая принимает только положительные числа, и хочу убедиться, что она правильно используется как внутри модуля, так и в других местах.
я хотел написать
#lang typed/racket
(require racket/contract)
(: excited-logarithm (-> Number Number))
(define/contract (excited-logarithm ([x : Number]) : Number)
(-> (>=/c 0) number?)
(displayln "Hold on to your decimals, we're going in!")
(log x))
но Typed Racket не предоставляет свой собственный define/contract
, а vanilla define/contract
не понимает аннотации Typed Racket (выдает синтаксическую ошибку).
Могу ли я как-то обойти это? Могу ли я использовать голый contract
, чтобы прикрепить контракт к excited-logarithm
так, как это сделал бы define/contract
?
Более того, есть ли веская причина, по которой я не должен этого делать? Не рекомендуется ли смешивать контракты и типы?
Примечание. Я полагаю, что мне действительно нужна здесь зависимая типизация, но она недоступна в Racket.