多态记录类型别名的语法

时间:2016-08-23 06:56:57

标签: purescript

有没有办法定义表示行多态记录的类型/别名?

所以给出了这个例子

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两次

对于非多态记录,它很简单,但我明确地希望允许包含其他不了解的字段的记录。

由于

1 个答案:

答案 0 :(得分:4)

以下是我如何使用上述示例。

X-Auth-Token

因此,定义一个类型,并使用类型

在函数上使用type Val r = {val :: Int | r} tester :: forall a. Val a -> Int tester v = v.a callTester = tester {val: 1, b: 2}