type 'a 'b production = { name: string; rule: 'a expr; action: 'a -> 'b }
action: 'a 'b. 'a -> 'b
但是我还需要一个基于expr
参数的约束,其中'a
操作统一为'a
操作,因此,只要我们可以在代数数据类型中使用内联记录构造函数,我们也应该可以在广义代数数据类型中使用它们,对吗?
type production = (* Ɐ a. b. *)
| Production: { name: string; rule: 'a expr; action: 'a -> 'b } -> production
但这不是一个有效的表格。我现在找到的解决方案是使规则也具有操作类型,例如:
type 'a expr =
| Terminal of string * ('a -> 'a)
| Sequence of 'a expr list * ('a list -> 'a)
但这种单同态仍然具有很强的限制性。我如何用共享约束对记录中的存在类型建模,以便在仍然可以对应用程序进行编译时检查的情况下,在不同的产品中有不同的返回类型(通过详尽的模式匹配)?
我认为我需要某种类型的限制(它们都是*->*
),但我来自Haskell,仍然不知道如何在Ocaml中做到这一点。
我不知道你想要什么。假设有一个函数'aexpr->'a
,如果您希望有一个包含不同内部表达式的生产列表,可以将生产定义为
type 'r production =
| P: { name: string; rule: 'a expr; action: 'a -> 'r } -> 'r production
然后,您可以获得[P string_of_float;P string_of_int]
列表,同时仍然知道操作的结果类型。(此外,您以前的定义是有效的。)
其他的通用量化给我的印象是有问题的:只有类型的函数'a'where'b。'a->'b
是
let fail _ = assert false
问题内容: 我有一条记录,想要向其中添加默认构造函数。 但是它创建了带参数的构造函数。 我们如何向记录添加默认构造函数? 问题答案: 为了分裂头发,您永远无法定义默认构造函数,因为在没有定义构造函数的情况下,编译器会生成默认构造函数,因此根据定义,任何定义的构造函数都不是默认构造函数。 如果希望记录具有无参数构造函数,则记录确实允许添加额外的构造函数或工厂方法,只要调用将所有记录字段作为参数的“规
这将使约束在范围内,为提供额外的参数。这里我的意图是包含一些(隐藏的)具体类型,它应该用作多态函数GHC compulins的具体类型: 我的用例的假设是1。同时计算和2。隐藏类型的值涉及(至少部分)第一个元组元素的计算。这意味着我不想在中调用两次(一次是获取,一次是使用该类型绑定第一个元组元素)。在存在约束的情况下,是否有某种方法使的定义成为可能?
问题内容: 我收到以下错误: 违反主键约束’PK_ss_student_grade’。无法在对象“ dbo.ss_student_grade”中插入重复的密钥。重复密钥值为(301、1011、24801、33)。 如果我在插入之前检查表,则没有记录具有这样的主键。 插入是通过C#代码完成的,并且我确保该代码仅运行一次。即使在错误之后,如果我检查表,我仍然无法获得具有这样的主键的记录。 注意:触发器
我有一个返回构造函数的javascript函数(见下面的代码示例)。我该如何用jsdoc的@returns标记来记录这一点。执行@returns{MyConstructor}似乎不正确,因为这意味着我返回的是“MyConstructor”的实例,而不是构造函数本身,对吗?
我在班里学习。出于好奇,我扩展了具有参数化构造函数的内部类。但是当我编写super(inti)来调用它时,代码不会编译。 因为内部类是外部类的一部分(成员),必须通过外部类访问它们。如何调用测试类的超级构造函数。 编译错误是:由于某些中间构造函数调用,没有外部类型的封闭实例可用
我有两个类:Date和Person Person有Date类的两个属性 案例1 类是与Person类分开的类。我有这段代码正常工作: 案例2:内部类(赋值要求) 我把作为Person的私有内部类 现在,上面的构造函数代码不再工作了。以下是错误消息: 说明资源路径位置类型由于某些中间构造函数调用人员,类型Person的封闭实例不可用。java/Wk03_Ch10_文件IO_Ch13_接口/Wk03_