多态记录类型别名的语法

第二

有没有一种方法来定义表示行多态记录的类型/别名?

所以给出这个例子

tester :: forall r. {val :: Int | r} -> Int
tester a =
  a.val

callTester = tester {val: 1, b: 2}

我想将记录类型定义为别名。就像是

type Val = forall r. {val :: Int | r}

tester :: Val -> Int 
tester a =
  a.val

callTester = tester {val: 1, b: 2}

但这不会编译。

对于较大的记录和更复杂的函数,多次定义类型会导致很大的噪音。最好将其排除在外。例如,fn :: a -> b -> a我必须定义a两次

对于非多态记录,它很简单,但我明确希望允许具有其他不预先知道的字段的记录。

谢谢

第二

这是我如何在上面的示例中使用它。

type Val r = {val :: Int | r}

tester :: forall a. Val a -> Int
tester v =
  v.a

callTester = tester {val: 1, b: 2}

因此,定义一个类型,并forall使用该类型在功能上

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

多态匿名函数类型别名

来自分类Dev

Haskell中的多态类型别名

来自分类Dev

乙烯基:撰写记录类型别名

来自分类Dev

类型别名错误

来自分类Dev

类型别名与类型相同

来自分类Dev

Typeof / instanceof类型别名

来自分类Dev

std :: bind与类型别名

来自分类Dev

Rust中的类型别名

来自分类Dev

快速扩展类型别名

来自分类Dev

Scala中的类型别名

来自分类Dev

类型别名的伴随对象

来自分类Dev

条件类型别名定义

来自分类Dev

如何创建类型别名

来自分类Dev

通用函数类型别名

来自分类Dev

如何检测类型别名?

来自分类Dev

键值对的TypeScript类型别名

来自分类Dev

TypeScript中的类型别名

来自分类Dev

Scala 中的类型别名

来自分类Dev

为什么C ++中的类型别名在其语法中使用“ using”而不是“ typedef”?

来自分类Dev

请解释涉及泛型和类型别名的这种打字稿语法

来自分类Dev

Scala类型标签和类型别名

来自分类Dev

从类型别名转换为原始类型

来自分类Dev

如何从类型别名确定类型?

来自分类Dev

类型别名和类似类型

来自分类Dev

如何从类型别名提取类型实参和类型参数引用其他类型别名?

来自分类Dev

如何从类型别名提取类型实参和类型参数引用其他类型别名?

来自分类Dev

Scala类型别名和方法重载

来自分类Dev

从Scala中的类型别名创建对象

来自分类Dev

类型别名在类中做什么?