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.