lspitzner / brittany

haskell source code formatter
GNU Affero General Public License v3.0
692 stars 72 forks source link

Brittany introduces space in TypeApplications with ticked-constructor #370

Open pbrisbin opened 2 years ago

pbrisbin commented 2 years ago

Brittany introduces an extra space in @'Bar, making it @ 'Bar. It handles @Bar correctly.

This has been happening for a number of versions, but it seems GHC 8.10 has been accepting it as still a TypeApplication. GHC 9.0 (more reasonably, IMO) sees it as trying to use a function named (@), which fails as out of scope.

% cat ~/brittany-repro.hs
main = do
    foo @'Bar baz
    foo @Bar baz
% stack exec brittany < ~/brittany-repro.hs
main = do
  foo @ 'Bar baz
  foo @Bar baz
% stack exec brittany -- --version
brittany version 0.14.0.2
Copyright (C) 2016-2019 Lennart Spitzner
Copyright (C) 2019 PRODA LTD
There is NO WARRANTY, to the extent permitted by law.
brittany.yaml ```yaml --- conf_debug: dconf_roundtrip_exactprint_only: false dconf_dump_bridoc_simpl_par: false dconf_dump_ast_unknown: false dconf_dump_bridoc_simpl_floating: false dconf_dump_config: false dconf_dump_bridoc_raw: false dconf_dump_bridoc_final: false dconf_dump_bridoc_simpl_alt: false dconf_dump_bridoc_simpl_indent: false dconf_dump_annotations: false dconf_dump_bridoc_simpl_columns: false dconf_dump_ast_full: false conf_forward: options_ghc: - -XBangPatterns - -XDataKinds - -XDeriveAnyClass - -XDeriveFoldable - -XDeriveFunctor - -XDeriveGeneric - -XDeriveLift - -XDeriveTraversable - -XDerivingStrategies - -XFlexibleContexts - -XFlexibleInstances - -XGADTs - -XGeneralizedNewtypeDeriving - -XLambdaCase - -XMultiParamTypeClasses - -XNoImplicitPrelude - -XNoMonomorphismRestriction - -XOverloadedStrings - -XQuasiQuotes - -XRankNTypes - -XRecordWildCards - -XScopedTypeVariables - -XStandaloneDeriving - -XTypeApplications - -XTypeFamilies conf_errorHandling: econf_ExactPrintFallback: ExactPrintFallbackModeInline econf_Werror: false econf_omit_output_valid_check: false econf_produceOutputOnErrors: false conf_preprocessor: ppconf_CPPMode: CPPModeAbort ppconf_hackAroundIncludes: false conf_obfuscate: false conf_roundtrip_exactprint_only: false conf_version: 1 conf_layout: lconfig_reformatModulePreamble: true lconfig_altChooser: tag: AltChooserBoundedSearch contents: 3 lconfig_allowSingleLineExportList: false lconfig_importColumn: 60 lconfig_hangingTypeSignature: false lconfig_importAsColumn: 50 lconfig_alignmentLimit: 1 lconfig_indentListSpecial: true lconfig_indentAmount: 2 lconfig_alignmentBreakOnMultiline: true lconfig_cols: 80 lconfig_indentPolicy: IndentPolicyLeft lconfig_indentWhereSpecial: true lconfig_columnAlignMode: tag: ColumnAlignModeDisabled contents: 0.7 ```