- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 custom set我想在打字 Racket 中使用它。一世
要求它使用 require/typed
与 #:opaque custom-set?
操作说明。它工作,除了代码在运行时失败,当我
调用custom-set?
带有语法对象。
我有以下内容:
#lang typed/racket/base
(module UNTYPED racket/base
(require racket/set)
(provide custom-set?
make-immutable-custom-set)
(define-custom-set-types custom-set
#:elem? identifier?
(λ (id1 id2) (eq? (syntax-e id1) (syntax-e id2)))))
(require/typed 'UNTYPED
[#:opaque MySet custom-set?]
[make-immutable-custom-set ((Listof Identifier) -> MySet)])
(custom-set? (make-immutable-custom-set (list #'foo #'bar))) ;; #t
(custom-set? '()) ;; #f
#t
或
#f
正如预期的那样。
custom-set?
带有语法对象的谓词:
(custom-set? #'(foo bar))
#f
:
custom-set?: broke its own contract
Attempted to use a higher-order value passed as `Any` in untyped code: #<syntax:stdin:: a>
in: the 1st argument of
a part of the or/c of
(or/c
struct-predicate-procedure?/c
(-> Any boolean?))
contract from: (interface for custom-set?)
blaming: (interface for custom-set?)
UNTYPED
的相同调用模块工作并返回
#f
正如预期的那样。你能告诉我为什么语法对象在这里违反契约(Contract)吗?我可以解决这个问题吗?
最佳答案
这是由于语法对象契约(Contract)不够好而导致的错误。具体来说,syntax/c
契约(Contract)适用于平面契约(Contract),而 Typed Racket 希望在 Any
时使用伴侣契约(Contract)。涉及类型。Any
这里涉及的是隐含的 Any
由 #:opaque
介绍需要谓词 custom-set?
.它出现在输入中,保护以类型代码开始并以非类型代码结束的值。由于未键入的代码可能会尝试与已键入的高阶值混淆,因此必须使用伴侣合约 any-wrap/c
对其进行包装。 (在 Typed Racket 内部)。any-wrap/c
是否可以保护潜在的高阶值以及可能包含高阶值的容器值。如果某个部分是可变的,或者如果某个部分中有一个函数,则不允许无类型代码改变该数据或调用该函数。
语法对象是容器。它们可以在“syntax-e”和语法属性中包含任意值。理想情况下,Typed Racket 的 any-wrap/c
契约(Contract)应该将语法对象包装在保护这些地方的伴侣契约(Contract)中。不幸的是,syntax/c
契约(Contract)系统中的契约(Contract)还不够好。由于这种语法,对象被认为是“不安全”的容器,如果 any-wrap/c
不能安全地包装它们,它必须引发契约(Contract)错误。
我看到这个问题可能在 future 得到解决的唯一方法是改进 syntax/c
与伴侣契约(Contract)一起工作。之后any-wrap/c
可以将语法对象视为安全容器,就像列表一样。
关于racket - 类型化 Racket 中的自定义哈希集导致语法对象违反契约(Contract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60842192/
我正在尝试构建某种形式的动态 Corda 合约,该合约具有一个可以保存独立合约列表和这些合约的独立状态的状态。 为了揭开这个概念的神秘面纱,请将“动态 Corda 合约”视为一个抽象类,它具有 Lis
怀念Collections.unmodifiableMap(),我一直在实现基于this discussion 的只读IDictionary 包装器,我的单元测试很快就遇到了问题: Assert.Ar
在消费者测试结束时我需要执行两个步骤: 完成模拟服务器 将协议(protocol)发布给经纪人。 一开始我是先发布再定稿,像这样: var opts = { //broker info } pac
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 3 年前。 Improve
您好, WCF 中数据/服务契约(Contract)的默认命名空间是 "http://tempuri.org/" .通过设置 ServiceContract.Namespace和 ServiceBeh
Using Attachments页面状态: Attachments are ZIP/JAR files referenced from a transaction by hash, but not
说我有一个方法 public void PrintStuff(string stuff, Color color, PageDimensions dimensions) { Assert.I
Mortgage.new({ from: ownerAccount, gas: defaultGas }).then( function(loanInstance) { loa
有很多问题询问是否混合异步和同步代码。 大多数答案都说为异步方法公开同步包装器和为同步方法公开异步包装器是个坏主意。 但是,没有一个答案解决您必须混合使用异步和同步代码的特定场景,以及如何避免由此产生
我是来自 PHP/Larvel、Ruby/Rails 和 Python/Django 的 Spring 新手。来自这些框架,我习惯于只看到模型(Entity/Dao?),其他一切都由 Framewor
我正在尝试为一些广泛使用的接口(interface)编写契约(Contract)测试: 沿着: public abstract class MyInterfaceContractTest extend
这是来自自定义 Microsoft .NET 运行时实现的代码,我有以下问题: public static string ToBase64String(byte[] inArray, int
我正在用遗留代码重构一个巨大的 C 库,其中许多函数在参数列表上都有指针。我还为新创建的函数编写单元测试以确保我没有破坏任何东西(除了来自单元测试的所有好东西,这是我的主要动机)。我也不允许更改库的
我的类有一个内部属性返回 List ,并且我想使用静态检查来帮助我不在我的程序集中做任何愚蠢的事情,并可能向该集合添加 null。 我在 foreach 的循环变量上收到这个静态警告在属性(prope
我在这个问题上花了几个小时...这是我的代码: public static IEnumerable Generate(this Func generator) where T : class {
我有兴趣了解更多关于contract-first 网络服务的信息,包括如何将它们组合在一起。 谁能推荐有用的资源来解释所需的方面/组件以及如何生成它们? 除了 Spring 的契约优先 Web 服务之
我刚刚将我的联系方式、银行和税务详细信息上传到 iTunes Connect;这个处理通常需要多长时间?我只能找到 5 年以上的信息。 最佳答案 契约(Contract)审核过程大约需要 20 分钟。
假设我们有一个类 Student使用以下构造函数: /** Initializes a student instance. * @param matrNr matriculation numb
使用 CXF 创建契约(Contract)最后的 Web 服务似乎是快速创建基于 SOAP 或 REST 的 Web 服务的有效方式。但是,我不清楚/不确定以下内容,非常感谢您提供见解/反馈: con
引自 Effective Java - Second Edition by Joshua Bloch For floating-point fields, use Double.compare or
我是一名优秀的程序员,十分优秀!