stylish-haskell icon indicating copy to clipboard operation
stylish-haskell copied to clipboard

Formatter drops unboxed tuples hashes

Open riz0id opened this issue 1 year ago • 1 comments

The formatter will reformat unboxed tuples to regular tuples by dropping the # character and removing necessary whitespace between the unboxed tuple and tuples elements. For example, the following type:

import GHC.Exts (State#, RealWorld)

newtype T a = T { unT# :: State# RealWorld -> (# State# RealWorld, a #) }

would be reformatted as:

newtype T a
  = T { unT# :: State# RealWorld -> (State# RealWorld, a) }

I'm not sure if this is specific to certain configuration. The formatter will drop unboxed tuples even if:

  • The .stylish-haskell.yaml option has cabal: false and UnboxedTuples listed under language_extensions:.
  • The UnboxedTuples extension is listed under default-extensions in the package cabal file.
  • A {-# LANGUAGE UnboxedTuples #-} pragma is added to the *.hs file containing the type T.

riz0id avatar Jan 20 '23 20:01 riz0id

The only way to prevent the formatter from altering the definition of a type containing unboxed tuples is to rewrite the type as:

newtype T a = T { unT# :: State# RealWorld -> (#,#) (State# RealWorld) a }

riz0id avatar Jan 20 '23 20:01 riz0id