Skip to content

multilines arrow expression enclosed in parenthesis format syntax error #1144

@guibou

Description

@guibou

Describe the bug

When trying to format a multiline arrow expression enclosed with parenthesis, ormolu generates an incorrect result.

To Reproduce

The following file:

{-# LANGUAGE Arrows #-}
import Control.Arrow

foo :: () -> ()
foo = proc () -> do
  (proc () -> 
    returnA -< ()
    ) -< ()

Calling ormolu -i on it leads to:

Bug.hs:9:3
  Parsing of formatted code failed:
  [GHC-58481] parse error (possibly incorrect indentation or mismatched brackets)

We can force the result to be written on disk, with ormolu -i -u, which leads to:

{-# LANGUAGE Arrows #-}

import Control.Arrow

foo :: () -> ()
foo = proc () -> do
  ( proc () ->
      returnA -< ()
  )
    -<
      ()

See how the parenthesis are aligned, which is incorrect. The file can be fixed by indenting by 1 space the closing space. I'm unsure about the details of the correct arrow syntax here.

Note that the arrow expression must be multiline to trigger this behavior.

Expected behavior

Ormolu should not fail to format on these arrows syntax.

Environment

  • OS name + version: linux nixos
  • Version of the code: ormolu 0.7.7.0

Additional context
Add any other context about the problem here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions