fsharp / fsharp/fsharp.org

Possibly wrong pattern for `union-type-case-data` in spec

Open
#729 0 comments 0 reactions 0 assignees View on GitHub
language-spec
Dominant language
TeX
Stars
311
Forks
291
PR merge metrics
No merged PRs in 30d

Description

On a page 139 (8. Type definition) possible union cases listed as follow:

```
union-type-case-data :=
ident --null union case
ident of union-type-field * ... * union-type-field --n-ary union case
ident : uncurried-sig --n-ary union case

uncurried-sig :=
args-spec -> type

args-spec :=
arg-spec * ... * arg-spec
```

But this one doesn't compile:
```
type Test =
| A
| B of int*int
| C : int->int
```
with error:

> Return types of union cases must be identical to the type being defined, up to abbreviations
> This construct is deprecated: it is only for use in the F# library

But this one is correct:
```
type Test =
| A
| B of int*int
| C of (int->int) //parentheses are required
```

So probably `union-type-case-data` should look like:

```
union-type-case-data :=
ident --null union case
ident of union-type-field * ... * union-type-field --n-ary union case
ident of (uncurried-sig) --n-ary union case
```

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by locating the source for page 139 of the type-definition section and compare the documented union-type-case-data grammar with the compiling and failing examples in the issue. Update the grammar so the function type case matches the required syntax, then verify that the rendered specification reflects the correction.

Written by the indexing model from the issue text.

Assessment

Tech stack
fsharp
Domain
documentation
Issue type
Documentation
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.