【发布时间】:2017-10-29 14:59:30
【问题描述】:
我正在编写一个只接受正数的函数,我想确保它在模块内部和其他地方都能正确使用。
我想写
#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,而原版 define/contract 不理解 Typed Racket 的注释(它会引发语法错误)。
我能以某种方式解决这个问题吗?我可以像define/contract 那样使用裸contract 将合同附加到excited-logarithm 吗?
此外,我不应该这样做有充分的理由吗?不鼓励混合合约和类型?
注意:我想我在这里真正想要的是依赖类型,但这在 Racket 中不可用。
【问题讨论】:
标签: racket contract typed-racket