Skip to content

Invalid multiline function type #3043

@axelo

Description

@axelo

Issue created from fantomas-online

Code

type MyCustomTypeWithAPrettyLongDescribingName = MyCustomConstructor1

let private myFunction
    : string
          -> (MyCustomTypeWithAPrettyLongDescribingName -> MyCustomTypeWithAPrettyLongDescribingName -> MyCustomTypeWithAPrettyLongDescribingName)
          -> unit =
    fun a fn -> ()

Result

type MyCustomTypeWithAPrettyLongDescribingName = MyCustomConstructor1

let private myFunction
    : string
          -> (MyCustomTypeWithAPrettyLongDescribingName
              -> MyCustomTypeWithAPrettyLongDescribingName
              -> MyCustomTypeWithAPrettyLongDescribingName)
          -> unit =
    fun a fn -> ()

Gives compiler error

    (5,56) (6, 14) error 10 parse

    Incomplete structured construct at or before this point in binding. Expected ',' or other token.

Problem description

While upgrading from fantomas 4.7 to 6.2 we encountered this formatting issue. We worked around this by extracting the fn type to its own type (arguable making the code more readable :)).

type MyCustomTypeWithAPrettyLongDescribingName = MyCustomConstructor1

type Fn =
    MyCustomTypeWithAPrettyLongDescribingName
        -> MyCustomTypeWithAPrettyLongDescribingName
        -> MyCustomTypeWithAPrettyLongDescribingName

let private myFunction: string -> Fn -> unit = fun a fn -> ()

but the compiler error was unexpected.

Extra information

  • The formatted result breaks my code.
  • The formatted result gives compiler warnings.
  • I or my company would be willing to help fix this.
  • I would like a release if this problem is solved.

Options

Fantomas main branch at 1/1/1990

Default Fantomas configuration

Did you know that you can ignore files when formatting by using a .fantomasignore file?
PS: It's unlikely that someone else will solve your specific issue, as it's something that you have a personal stake in.

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