Record
Background
Given a file named "pen.json" with:
{
  "type": "library",
  "dependencies": {}
}Create a record with a field
Given a file named "Foo.pen" with:
type r {
  x number
}
f = \() r {
  r{x: 42}
}When I run pen build
Then the exit status should be 0.
Create a record with two fields
Given a file named "Foo.pen" with:
type r {
  x number
  y none
}
f = \() r {
  r{x: 42, y: none}
}When I run pen build
Then the exit status should be 0.
Create a record with no field
Given a file named "Foo.pen" with:
type r {}
f = \() r {
  r{}
}When I run pen build
Then the exit status should be 0.
Update a record
Given a file named "Foo.pen" with:
type r {
  x number
  y none
}
f = \(x r) r {
  r{...x, y: none}
}When I run pen build
Then the exit status should be 0.
Get a field in a record
Given a file named "Foo.pen" with:
type r {
  x number
}
f = \(x r) number {
  x.x
}When I run pen build
Then the exit status should be 0.
Use an equal operator
Given a file named "Foo.pen" with:
type r {
  x number
}
f = \(x r, y r) boolean {
  x == y
}When I run pen build
Then the exit status should be 0.
Use a not-equal operator
Given a file named "Foo.pen" with:
type r {
  x number
}
f = \(x r, y r) boolean {
  x == y
}When I run pen build
Then the exit status should be 0.
Propagate openness of a record
Given a file named "Foo.pen" with:
type Foo {
  X number
}And a file named "Bar.pen" with:
import 'Foo
Bar = \() Foo'Foo {
  Foo'Foo{X: 42}
}And a file named "Baz.pen" with:
import 'Bar
f = \() number {
  Bar'Bar().X
}When I run pen build
Then the exit status should be 0.