多态记录类型别名的语法



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

给定这个例子

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

最新更新