多态记录类型别名的语法
Syntax for polymorphic record type alias
有没有办法定义一个 type/alias 表示行多态记录?
所以给出这个例子
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
在使用类型
的函数上
有没有办法定义一个 type/alias 表示行多态记录?
所以给出这个例子
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
在使用类型