有没有一种方法来定义表示行多态记录的类型/别名?
所以给出这个例子
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] 删除。
我来说两句