# Type Articles: A, AN

Type articles are small keywords that improve readability in type declarations and expressions. They are syntactically optional but recommended for clarity.

## Keywords

- **A** - Singular article for types
- **AN** - Singular article before vowel sounds

## A / AN

Used in type annotations to improve readability.

### Syntax

```l4
GIVEN name IS A Type
GIVEN name IS AN Type
ASSUME name IS A Type
```

### Examples

**Example file:** 

```l4-file
-- Type articles: A, AN, THE

-- Using A with Types

-- A before consonant sounds
ASSUME age IS A NUMBER
ASSUME name IS A STRING
ASSUME employed IS A BOOLEAN

-- A with function parameters
GIVEN x IS A NUMBER
double x MEANS x TIMES 2

#EVAL double 21

-- Using AN with Types

-- AN before vowel sounds (for readability)
DECLARE Account HAS
  balance IS A NUMBER
  holder IS A STRING

ASSUME myAccount IS AN Account

-- Both A and AN are syntactically valid
-- AN just reads better before vowels
GIVEN acc IS AN Account
getBalance acc MEANS acc's balance

-- Using THE for Field Access

DECLARE Person HAS
  personName IS A STRING
  personAge IS A NUMBER

DECIDE john IS Person WITH
  personName IS "John"
  personAge IS 30

-- Field access using genitive
DECIDE johnsName IS john's personName
DECIDE johnsAge IS john's personAge

#EVAL johnsName
#EVAL johnsAge

-- Comparing THE...OF vs Genitive

-- Genitive syntax for field access
DECIDE nameViaGenitive IS john's personName

#EVAL nameViaGenitive

-- Articles in Legal-Style Text

DECLARE Contract HAS
  effectiveDate IS A NUMBER
  amount IS A NUMBER

ASSUME agreement IS A Contract

-- Field access via genitive
DECIDE contractDate IS agreement's effectiveDate
DECIDE contractAmount IS agreement's amount
```



```l4
-- "A" before consonant sounds
ASSUME age IS A NUMBER
ASSUME name IS A STRING
GIVEN x IS A NUMBER

-- "AN" before vowel sounds
ASSUME account IS AN Account
GIVEN obj IS AN Object
```

### Rules

- Use **A** before consonant sounds: `A NUMBER`, `A STRING`, `A BOOLEAN`
- Use **AN** before vowel sounds: `AN Account`, `AN Integer`
- Both are syntactically equivalent — the distinction is for readability only

### Note

Field access in L4 uses the genitive (`'s`) syntax:

```l4
DECLARE Person HAS
  name IS A STRING
  age IS A NUMBER

ASSUME john IS A Person

-- Access fields with genitive
DECIDE johnsName IS john's name
DECIDE johnsAge IS john's age
```

See 

```l4-file
-- Example: Genitive ('s) for field access
-- Demonstrates possessive syntax for record fields

DECLARE Person
  HAS `full name` IS A STRING
      age         IS A NUMBER

DECIDE `the applicant` IS Person WITH
  `full name` IS "John Doe"
  age         IS 30

-- Using genitive (reads like English)
DECIDE `applicant age using genitive` IS `the applicant`'s age

-- Equivalent to using THE ... OF
DECIDE `applicant age using THE OF` IS age OF `the applicant`

#EVAL `applicant age using genitive`
#EVAL `applicant age using THE OF`
```

 for details.

## Related Keywords

- **[IS](/l4/reference/syntax.md)** - Type assertions
- **[DECLARE](/l4/reference/types/DECLARE.md)** - Type declarations
- **[GIVEN](/l4/reference/functions/GIVEN.md)** - Function parameters

## See Also

- **[Types Reference](/l4/reference/types.md)** - Type system documentation
