Skip to content

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

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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