Skip to content

Possibly wrong pattern for union-type-case-data in spec #729

Open
@Szer

Description

@Szer

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions