NixOS / nixpkgs

Nix Packages collection & NixOS
MIT License
17.94k stars 13.96k forks source link

haskellPackages.fast-tags is marked broken but builds successfully #172843

Closed mpickering closed 2 years ago

mpickering commented 2 years ago

Describe the bug

haskellPackage.fast-tags is marked broken, but builds fine.

Steps To Reproduce

nix-build . -A haskellPackages.fast-tags

The build fails because the package is marked broken.. it just needs to be marked as unbroken, but I don't know where to modify to achieve that as the brokeness is described in the generated hackage-packages.nix file.

Expected behavior

The build succeeds

leungbk commented 2 years ago

https://github.com/NixOS/nixpkgs/blob/f9f5c9c8d49d879590aeddcdcb3089c932fc3020/pkgs/development/haskell-modules/configuration-hackage2nix/broken.yaml#L1407

leungbk commented 2 years ago

When I try building haskellPackages.fast-tags on the haskell-updates branch on aarch64-darwin, two tests fail for me.

cdepillabout commented 2 years ago

@mpickering Basically the process is to remove this line:

https://github.com/NixOS/nixpkgs/blob/f9f5c9c8d49d879590aeddcdcb3089c932fc3020/pkgs/development/haskell-modules/configuration-hackage2nix/broken.yaml#L1407

Then run ./maintainers/scripts/haskell/regenerate-hackage-packages.sh in order to regenerate hackage-packages.nix. Send a PR to the haskell-updates branch with those changes.

sternenseemann commented 2 years ago

It was marked broken due to this test failure:

tests
  tokenize
    "xyz  -- abc":                                                              OK
    "xyz  --- abc":                                                             OK
    "  {-   foo -}":                                                            OK
    "  {-   foo \n\n-}":                                                        OK
    "  {- foo {- bar-} -}":                                                     OK
    "  {-# INLINE #-}":                                                         OK
    "a::b->c":                                                                  OK
    "a\8759b\8594c":                                                            OK
    "x{-\n  bc#-}\n":                                                           OK
    "X.Y":                                                                      OK
    "a=>b":                                                                     OK
    "a \8658 b":                                                                OK
    "x9":                                                                       OK
    "x :+: y":                                                                  OK
    "(#$)":                                                                     OK
    "Data.Map.map":                                                             OK
    "Map.map":                                                                  OK
    "forall a. f a":                                                            OK
    "forall a . Foo":                                                           OK
    "forall a. Foo":                                                            OK
    "forall a .Foo":                                                            OK
    "forall a.Foo":                                                             OK
    "$#-- hi":                                                                  OK
    "(*), (-)":                                                                 OK
    "(.::)":                                                                    OK
    "data (:+) a b":                                                            OK
    "data (.::+::) a b":                                                        OK
    "foo \"bar\" baz":                                                          OK
    "foo \"bar\\\n  \\bar\" baz":                                               OK
    "foo \"bar\\\r\n  \\bar\" baz":                                             OK
    "foo \"bar\\\r\n\\bar\" baz":                                               OK
    "(\\err -> case err of Foo -> True; _ -> False)":                           OK
    "foo = \"foo\\n\\\r\n  \\\" bar":                                           OK
    "foo = \"foo\\n\\\n  \\x\" bar":                                            OK
    "{-   ___   -}import Data.Char;main=putStr$do{c<-\"/1 AA A A;9+ )11929:     OK
    "one_hash, two_hash :: text_type\nhash_prec :: Int -> Int\none_hash  =:     OK
    "showComplexFloat x 0.0 = showFFloat Nothing x \"\"":                       OK
    "deriveJSON defaultOptions ''CI.CI":                                        OK
    "--:+: :+: :+:":                                                            OK
    "\\x -> y":                                                                 OK
    "f :: G -> N -> R\nf g = \n\\n -> case lookup n info' of\n\tNothing ->:     OK
    tokenize splices
      "$(foo)":                                                                 OK
      "$(foo [| baz |])":                                                       OK
      "$(foo \10214 baz \10215)":                                               OK
      "$(foo [bar| baz |])":                                                    OK
      "$(foo [Foo.bar| baz \10215)":                                            OK
      "$(foo [$bar| baz |])":                                                   OK
      "$(foo [$Foo.bar| baz \10215)":                                           OK
      "$(foo [bar| bar!\nbaz!\n $(baz) |])":                                    OK
      "$(foo [Foo.bar| bar!\nbaz!\n $(baz) \10215)":                            OK
      "$(foo [$bar| bar!\nbaz!\n $(baz) |])":                                   OK
      "$(foo [$Foo.bar| bar!\nbaz!\n $(baz) \10215)":                           OK
      "foo [$bar| baz |]":                                                      OK
      "foo [$bar|\n baz |]":                                                    OK
      "foo [$bar|\n baz \n|]":                                                  OK
      "foo\n$bar\nbaz":                                                         OK
      "foo\nf $ x = f x\nbaz":                                                  OK
    "import Foo hiding (Bar)":                                                  OK
    "foo\n#{enum Bar, Baz }\nquux":                                             OK
    "newtype ControlOp' = ControlOp' CInt\n\n#{enum ControlOp, ControlOp\n:     OK
    "a # b = apply a b":                                                        OK
    "\"\"":                                                                     OK
    "\"a\"":                                                                    OK
    "\"abc\"":                                                                  OK
    "\"abc\\n\"":                                                               OK
    "\"abc\\d\"":                                                               OK
    "\"abc\\\\d\"":                                                             OK
    "\"\\\\d\"":                                                                OK
    "\"\\\\\"":                                                                 OK
    "\"a\" ++ \"b\"":                                                           OK
    "\"\\\\\" ++ \"b\"":                                                        OK
    "'a'":                                                                      OK
    "'\\''":                                                                    OK
    "'\"'":                                                                     OK
    "'\\\\'":                                                                   OK
    "foo' bar'":                                                                OK
    "'\\n'":                                                                    OK
    "argsOf s = map (init . (drop $ 2 + length s)) . filter ((\"\\\\\" ++ :     OK
    "foo\n# 17 \"/usr/include/stdc-predef.h\" 3 4\nbar":                        OK
    "foo\n#{get_area \"Queue.T\"}\nbar":                                        OK
    "foo\n#ccall apr_atomic_init, Ptr <apr_pool_t> -> IO <apr_status_t>\nb:     OK
  tokenize with newlines
    vanilla
      "x\ny\n":                                                                 OK
      " xx\n yy\n":                                                             OK
      "\nclass (X x) => C a b where\n\tm :: a->b\n\tn :: c\n":                  OK
    literate
      "foo bar baz":                                                            OK
      "foo bar baz\nquux fizz buzz":                                            OK
      "> foo = 1":                                                              OK
      "This is a factorial function\n\n> f :: Integer -> Integer\n> f 0 = 1\:   OK
      "This is a factorial function\n\n> f :: Integer -> Integer\n> f 0 = 1\:   OK
      "    This is a factorial function\n\n> f :: Integer -> Integer\n> f 0 :   OK
      "This is a factorial function\n\\begin{code}\nf :: Integer -> Integer\:   OK
      "This is a 'factorial' function\n\\begin{code}\nf :: Integer -> Intege:   OK
      "This is a 'factorial' function\n\\begin{code}\n  f :: Integer -> Inte:   OK
      "Test\n\\begin{code}\nclass (X x) => C a b where\n  m :: a->b\n  n :: :   OK
      "Test\n\\begin{code}\nclass (X x) => C a b where\n\tm :: a->b\n\tn :: :   OK
  Comments stripping
    "hello -- there":                                                           OK
    "hello --there":                                                            OK
    "hello {- there -} fred":                                                   OK
    "hello -- {- there -}\nfred":                                               OK
    "{-# LANG #-} hello {- there {- nested -} comment -} fred":                 OK
    "hello {-\nthere\n------}\n fred":                                          OK
    "hello {-  \nthere\n  ------}  \n fred":                                    OK
    "hello {-\nthere\n-----}\n fred":                                           OK
    "hello {-  \nthere\n  -----}  \n fred":                                     OK
    "hello {-\n-- there -}":                                                    OK
    "foo --- my comment\n--- my other comment\nbar":                            OK
  Break blocks
    vanilla
      "a\nb\n":                                                                 OK
      "a\n a\nb\n":                                                             OK
      "a\n a\n a\nb\n":                                                         OK
      "a\n a\n\n a\nb\n":                                                       OK
      "a\n\n\n a\nb\n":                                                         OK
      "a\n aa\n aa\n":                                                          OK
      " aa\n aa\n":                                                             OK
      "one_hash, two_hash :: text_type\nhash_prec :: Int -> Int\none_hash  =:   OK
      "one_hash, two_hash :: text_type; hash_prec :: Int -> Int; one_hash  =:   OK
      "{\n  data F f :: * ; -- foo\n                  -- bar\n              :   OK
    literate
      "> a\n>\n>\n>  a\n> b\n":                                                 OK
      "> a\n> \n> \n>  a\n> b\n":                                               OK
      "> a\n>  aa\n>  aa\n":                                                    OK
      "> a\n>  aa\n>\n>  aa\n":                                                 OK
  whereBlock
    "class A f where\n  data F f :: * -- foo\n                -- bar\n    :     OK
    "class A f where {\n  data F f :: * ; -- foo\n                  -- bar:     OK
  Emacs
    format
      fn:10:20:/wibble/:/ wobble/:TagVal {tvName = "wibble wobble", tvType =:   OK
  Vim
    parseTag
      ("fn",1,"text",Function):                                                 OK
    dropAdjacent
      [("fn",0,"a")]:                                                           OK
      [("fn",0,"a"),("fn",1,"a")]:                                              OK
      [("fn",1,"a"),("fn",0,"a")]:                                              OK
      [("fn",0,"a"),("fn",1,"a"),("fn",2,"a")]:                                 OK
      [("fn",0,"a"),("fn",1,"a"),("fn",2,"a"),("fn",3,"a")]:                    OK
      [("fn",0,"a"),("fn2",1,"a")]:                                             OK
      [("fn",0,"a"),("fn",1,"b")]:                                              OK
  process
    prefix, suffix and offset tracking
      "module Bar.Foo where\n":                                                 OK
      "newtype Foo a b =\n\tBar x y z\n":                                       OK
      "data Foo a b =\n\tBar x y z\n":                                          OK
      "f :: A -> B\ng :: C -> D\ndata D = C {\n\tf :: A\n\t}\n":                OK
      "instance Foo Bar where\n  newtype FooFam Bar = BarList [Int]":           OK
      "instance Foo Bar where\n  newtype FooFam Bar = BarList { getBarList ::   OK
      "instance Foo Bar where\n  data (Ord a) => FooFam Bar a = BarList { ge:   OK
      "newtype instance FooFam Bar = BarList { getBarList :: [Int] }":          OK
      "data instance (Ord a) => FooFam Bar a = BarList { getBarList :: [a] }:   OK
    data
      "data X\n":                                                               OK
      "data X = X Int\n":                                                       OK
      "data Foo = Bar | Baz":                                                   OK
      "data Foo =\n\tBar\n\t| Baz":                                             OK
      "data Foo a = Bar { field :: Field }":                                    OK
      "data R = R { a::X, b::Y }":                                              OK
      "data R = R { a, b::X }":                                                 OK
      "data R = R { a\8759X, b\8759Y }":                                        OK
      "data R = R { a, b\8759X }":                                              OK
      "data R = R {\n\ta::X\n\t, b::Y\n\t}":                                    OK
      "data R = R {\n\ta,b::X\n\t}":                                            OK
      "data Foo a b = (:*:) { foo :: a, bar :: b }":                            OK
      "data R = R {\n    a :: !RealTime\n  , b :: !RealTime\n}":                OK
      "data Rec = Rec {\n  a :: Int\n, b :: !Double\n, c :: Maybe Rec\n}":      OK
      "data X = X !Int":                                                        OK
      "data X = Y !Int !X | Z":                                                 OK
      "data X = Y :+: !Z | !X `Mult` X":                                        OK
      "data X = !Y `Add` !Z":                                                   OK
      "data X = forall a. Y a":                                                 OK
      "data X = forall a . Y a":                                                OK
      "data X = forall a .Y a":                                                 OK
      "data X = forall a.Y a":                                                  OK
      "data X = forall a. Eq a => Y a":                                         OK
      "data X = forall a. (Eq a) => Y a":                                       OK
      "data X = forall (a :: Nat). (Eq' a) => Y a":                             OK
      "data X = forall a. (Eq a, Ord a) => Y a":                                OK
      "data X = forall a. Ref :<: a => Y a":                                    OK
      "data X = forall a. (:<:) Ref a => Y a":                                  OK
      "data X = forall a. ((:<:) Ref a) => Y a":                                OK
      "data X = forall a. Y !a":                                                OK
      "data X = forall a. (Eq a, Ord a) => Y !a":                               OK
      "data Foo a = \n    Plain Int\n  | forall a. Bar a Int\n  | forall a b:   OK
      "data X a = Add a ":                                                      OK
      "data Eq a => X a = Add a":                                               OK
      "data (Eq a) => X a = Add a":                                             OK
      "data (Eq a, Ord a) => X a = Add a":                                      OK
      "data (Eq (a), Ord (a)) => X a = Add a":                                  OK
      "data Ref :<: f => X f = RRef f":                                         OK
      "data a :<: b => X a b = Add a":                                          OK
      "newtype Ref :<: f => X f = RRef f":                                      OK
      "newtype a :<: b => X a b = Add a":                                       OK
      "data Ref :<: [f] => X f = RRef f":                                       OK
      "data [a] :<: b => X a b = Add a":                                        OK
      "newtype Ref :<: [f] => X f = RRef f":                                    OK
      "newtype [a] :<: b => X a b = Add a":                                     OK
      "data (a :<: b) => X a b = Add a":                                        OK
      "data a :><: b = a :>|<: b":                                              OK
      "data (:><:) a b = (:>|<:) a b":                                          OK
      "data (:><:) a b = Foo b | (:>|<:) a b":                                  OK
      "data (:><:) a b = Foo b | forall c. (:>|<:) a c":                        OK
      "data (:><:) a b = Foo b | forall c. (Eq c) => (:>|<:) a c":              OK
      "data (:><:) a b = Foo b | forall c. Eq c => (:>|<:) a c":                OK
      "newtype Eq a => X a = Add a":                                            OK
      "newtype (Eq a) => X a = Add a":                                          OK
      "newtype (Eq a, Ord a) => X a = Add a":                                   OK
      "newtype () => X a = Add a":                                              OK
      "newtype (u :*: v) z = X":                                                OK
      "data (u :*: v) z = X":                                                   OK
      "type (u :*: v) z = (u, v, z)":                                           OK
      "newtype ((u :: (* -> *) -> *) :*: v) z = X":                             OK
      "data ((u :: (* -> *) -> *) :*: v) z = X":                                OK
      "type ((u :: (* -> *) -> *) :*: v) z = (u, v, z)":                        OK
      "newtype () => ((u :: (* -> *) -> *) :*: v) z = X":                       OK
      "data () => ((u :: (* -> *) -> *) :*: v) z = X":                          OK
      "type () => ((u :: (* -> *) -> *) :*: v) z = (u, v, z)":                  OK
      "newtype (Eq (v z)) => ((u :: (* -> *) -> *) :*: v) z = X":               OK
      "data (Eq (v z)) => ((u :: (* -> *) -> *) :*: v) z = X":                  OK
      "type (Eq (v z)) => ((u :: (* -> *) -> *) :*: v) z = (u, v, z)":          OK
      "newtype Eq (v z) => ((u :: (* -> *) -> *) :*: v) z = X":                 OK
      "data Eq (v z) => ((u :: (* -> *) -> *) :*: v) z = X":                    OK
      "type Eq (v z) => ((u :: (* -> *) -> *) :*: v) z = (u, v, z)":            OK
      "newtype (Eq (v z)) => ((u :: (* -> *) -> *) `Foo` v) z = X":             OK
      "data (Eq (v z)) => ((u :: (* -> *) -> *) `Foo` v) z = X":                OK
      "type (Eq (v z)) => ((u :: (* -> *) -> *) `Foo` v) z = (u, v, z)":        OK
      "type (Eq (v z)) => ((u \8759 (* -> *) -> *) `Foo` v) z = (u, v, z)":     OK
      "newtype Eq (v z) => ((u :: (* -> *) -> *) `Foo` v) z = X":               OK
      "data Eq (v z) => ((u :: (* -> *) -> *) `Foo` v) z = X":                  OK
      "type Eq (v z) => ((u :: (* -> *) -> *) `Foo` v) z = (u, v, z)":          OK
      "type Eq (v z) \8658 ((u \8759 (* \8594 *) \8594 *) `Foo` v) z = (u, v:   OK
      "data (:*:) u v z = X":                                                   OK
      "data (Eq (u v), Ord (z)) => (:*:) u v z = X":                            OK
      "data (u `W` v) z = X":                                                   OK
      "data (Eq (u v), Ord (z)) => (u `W` v) z = X":                            OK
      "newtype X a = Z {\n -- TODO blah\n foo :: [a] }":                        OK
      "newtype (u :*: v) z = X {\n -- my insightful comment\n extract :: (u :   OK
      "newtype (u :*: v) z = X {\n -- my insightful comment\n pattern :: (u :   OK
      "data Hadron a b = Science { f :: a, g :: a, h :: b }":                   OK
      "data Hadron a b = Science { f :: a, g :: a, pattern :: b }":             OK
      "data Hadron a b = Science { f :: a, g :: (a, b), h :: b }":              OK
      "data Hadron a b = forall x. Science { f :: x, h :: b }":                 OK
      "data Hadron a b = forall x. Science { f :: [x], h :: b }":               OK
      "data Hadron a b = forall x y. Science { f :: (x, y), h :: b }":          OK
      "data Hadron a b = forall x y. Science { f :: [(x, y)], h :: b }":        OK
      "data Hadron a b = forall x y. Science { f :: [(Box x, Map x y)], h :::   OK
      "data Hadron a b = forall x y. Science { f \8759 [(Box x, Map x y)], h:   OK
      "data Hadron a b = forall x y z. Science\n  { f :: x\n  , g :: [(Box x:   OK
      "data Hadron a b = forall x y z. Science\n  { f :: x\n  , g :: [(Box x:   OK
      "data Hadron a b = Science { h :: b }":                                   OK
      "data Test a b =\n    Foo a\n  | Bar [(Maybe a, Map a b, b)]":            OK
      "data Test a b =\n    Foo a\n  | [(Maybe b, Map b a, a)] `Bar` [(Maybe:   OK
      "data IO a = IO (World->(a,World))":                                      OK
      "data SubTransformTriple a =\n        SubTransformTriple\n           (:   OK
      "data TestCase \n    = forall a prop . (Testable prop, Data a) \n    =:   OK
      "-- | Binding List\ndata BindingList v a = Variable v => BindingList {:   OK
      "data Tester a = Tester\n    {(===) :: [String] -> a -> IO ()\n    ,fa:   OK
      "data Tester a = Tester\n    {(===) :: [String] -> a -> IO ()\n    ,fa:   OK
      "-- | View of the right end of a sequence.\ndata ViewR s a\n    = Empt:   OK
      "-- | View of the right end of a sequence.\ndata ViewR s a\n    = s a :   OK
      "data [] a = [] | a : [a]":                                               OK
      "data () = ()":                                                           OK
      "data (,) a b = (,) a b":                                                 OK
      "data (,,) a b c = (,,) a b c":                                           OK
      "data (a, b) = (a, b)":                                                   OK
      "data (a, b, c) = (a, b, c)":                                             OK
    gadt
      "data X where A :: X\n":                                                  OK
      "data X where\n\tA :: X\n":                                               OK
      "data X where\n\tA :: X\n\tB :: X\n":                                     OK
      "data X where\n\tA, B :: X\n":                                            OK
      "data X :: * -> * -> * where\n  A, B :: Int -> Int -> X\n":               OK
      "data X \8759 * \8594 * \8594 * where\n  A, B \8759 Int \8594 Int \859:   OK
      "data Vec ix where\n  Nil   :: Int -> Foo Int\n  (:::) :: Int -> Vec I:   OK
      "data Vec ix where\n  Nil   :: Int -> Foo Int\n  -- foo\n  (:::) :: In:   OK
      "data NatSing (n :: Nat) where\n  ZeroSing :: 'Zero\n  SuccSing :: Nat:   OK
      "data Rec a where\n  C :: { foo :: Int } -> Rec a":                       OK
      "data Rec a where\n  C :: { foo :: Int, bar :: Int -> Int } -> Rec a":    OK
      "data Rec a where\n  C :: { foo :: Int, bar :: Int -> Int } -> Rec a\n:   OK
      "newtype TyConProxy a b where\n    TyConProxy :: () -> TyConProxy a b\:   OK
      "data Foo a where\n  Bar :: Baz a => { foo :: Int, bar :: a } -> Foo a:   OK
      "type role Map nominal representational":                                 OK
    families
      "type family X :: *\n":                                                   OK
      "data family X :: * -> *\n":                                              OK
      "data family a ** b":                                                     OK
      "type family a :<: b\n":                                                  OK
      "type family (a :: Nat) :<: (b :: Nat) :: Nat\n":                         OK
      "type family (a :: Nat) `Family` (b :: Nat) :: Nat\n":                    OK
      "type family (m :: Nat) <=? (n :: Nat) :: Bool":                          OK
      "type family (m \8759 Nat) <=? (n \8759 Nat) \8759 Bool":                 OK
      "data instance X a b = Y a | Z { unZ :: b }":                             OK
      "data instance (Eq a, Eq b) => X a b = Y a | Z { unZ :: b }":             OK
      "data instance (Eq a, Eq b) => X a b = Y a | Z { pattern :: b }":         OK
      "data instance XList Char = XCons !Char !(XList Char) | XNil":            OK
      "newtype instance Cxt x => T [x] = A (B x) deriving (Z,W)":               OK
      "type instance Cxt x => T [x] = A (B x)":                                 OK
      "data instance G [a] b where\n   G1 :: c -> G [Int] b\n   G2 :: G [a] :   OK
      "class C where\n\ttype X y :: *\n":                                       OK
      "class C where\n\tdata X y :: *\n":                                       OK
      "class C where\n\ttype X y \8759 *\n":                                    OK
      "class C where\n\tdata X y \8759 *\n":                                    OK
    functions
      "a,b::X":                                                                 OK
      "(+), a :: X":                                                            OK
      "(\8226) :: X":                                                           OK
      "1 :: Int":                                                               OK
      "f :: Int -> Int\nf _ = 1":                                               OK
      "(.::) :: X -> Y":                                                        OK
      "(+::) :: X -> Y":                                                        OK
      "(->:) :: X -> Y":                                                        OK
      "(--+) :: X -> Y":                                                        OK
      "(=>>) :: X -> Y":                                                        OK
      "one_hash, two_hash :: text_type;\nhash_prec :: Int -> Int;\none_hash :   OK
      "one_hash, two_hash :: text_type; hash_prec :: Int -> Int; one_hash  =:   OK
      "assertDataFormatError :: DecompressError -> IO String\nassertDataForm:   OK
      "instance PartialComparison Double where\n    type PartialCompareEffor:   OK
      "hexQuad :: Z.Parser Int\nhexQuad = do\n  s <- Z.take 4\n  let hex n |:   OK
      "instance Path  T.Text      where readPath = Just; pathRep _ = typeRep:   OK
      "prop_bounds2 o1 w1 o2 w2 = let n1 = fromW8 w1 ; n2 = fromW8 w2 ; bs =:   OK
      "string :: String -> ReadP r String\n-- ^ Parses and returns the speci:   OK
      "-- | Get every node of a tree, put it into a list.\nclimb :: Tree a -:   OK
      "addend hid a (NotM (App uid okh elr as)) = NotM $ App uid okh elr (f :   OK
      "realWorldTc :: TyCon; \\\nrealWorldTc = mkTyCon3 \"ghc-prim\" \"GHC.T:   OK
      "(r `mkQ` br) a = _":                                                     OK
      "_?_ = return unsafePerformIO":                                           OK
      "(+) :: DebMap -> String -> DebianVersion\nm + k = maybe (error (\"No :   OK
      "(!) :: DebMap -> String -> DebianVersion\n_ ! k = maybe (error (\"No :   OK
      "(.) :: DebMap -> String -> DebianVersion\nm . k = maybe (error (\"No :   OK
      "(.) :: DebMap -> String -> DebianVersion\nm . k x = maybe (error (\"N:   OK
      "{- 123___ -}import Data.Char;main=putStr$do{c<-\"/1 AA A A;9+ )11929 :   OK
      "{-   456___   -}import Data.Char;main=putStr$do{c<-\"/1 AA A A;9+ )11:   OK
      "showComplexFloat :: Double -> Double -> String\nshowComplexFloat x 0.:   OK
      "createAlert            :<|>\n getAlert              :<|>\n deleteAler:   OK
      "_g :: X -> Y":                                                           OK
      "(f . g) x = f (g x)":                                                    OK
      "(#) :: TransArray c => c -> (b -> IO r) -> Trans c b -> IO r\na # b =:   OK
      "escape :: FilePath -> FilePath\nescape s = \"\\\"\" ++ concatMap esc :   OK
      "happyError = \tks i -> error (\n\t\"Parse error in line \" ++ show (i:   OK
      "> happyError = \tks i -> error (\n>\t\"Parse error in line \" ++ show:   OK
      "module UnindentedImportList(\nfoo,\n(++),\nbar,\nquux \n)\nwhere\n\ni:   OK
      "\n\n#define FOO\n\n\n  module UnindentedImportList(\n  foo,\n  (++),\:   OK
      "\n{-# LANGAUGE TemplateHaskell #-}\nmodule Example where\n\nimport Lo:   OK
      "\n{-# LANGAUGE TemplateHaskell #-}\nmodule Example where\n\nimport Lo:   OK
      toplevel functions without signatures
        "$(return . map sumDeclaration $ [0..15])":                             OK
        "$( fmap (reverse . concat) . traverse prismsForSingleType $ [1..15] ): OK
        "T.makeInstances [2..6]\nx":                                            OK
        "infix 5 |+|":                                                          OK
        "infixl 5 |+|":                                                         OK
        "infixr 5 |+|":                                                         OK
        "f = g":                                                                OK
        "f :: a -> b -> a\nf x y = x":                                          OK
        "f x y = x":                                                            OK
        "f (x :+: y) z = x":                                                    OK
        "(x :+: y) `f` z = x":                                                  OK
        "(x :+: y) *: z = x":                                                   OK
        "((:+:) x y) *: z = x":                                                 OK
        "(*:) (x :+: y) z = x":                                                 OK
        "(*:) ((:+:) x y) z = x":                                               OK
        strict match (!)
          "f !x y = x":                                                         OK
          "f x !y = x":                                                         OK
          "f !x !y = x":                                                        OK
          "f ! x y = x":                                                        OK
          "f ! x = x":                                                          OK
          "(*:) !(x :+: y) z = x":                                              OK
          "(*:) !(!x :+: !y) !z = x":                                           OK
          "(*:) !((:+:) x y) z = x":                                            OK
          "(*:) !((:+:) !x !y) !z = x":                                         OK
          "(!) :: a -> b -> a\n(!) x y = x":                                    OK
          "x ! y = x":                                                          OK
        lazy match (~)
          "f ~x y = x":                                                         OK
          "f x ~y = x":                                                         OK
          "f ~x ~y = x":                                                        OK
          "f ~ x y = x":                                                        OK
          "f ~ x = x":                                                          OK
          "(*:) ~(x :+: y) z = x":                                              OK
          "(*:) ~(~x :+: ~y) ~z = x":                                           OK
          "(*:) ~((:+:) x y) z = x":                                            OK
          "(*:) ~((:+:) ~x ~y) ~z = x":                                         OK
          "(~) :: a -> b -> a\n(~) x y = x":                                    OK
          "x ~ y = x":                                                          OK
        at patterns (@)
          "f z@x y    = z":                                                     OK
          "f x   z'@y = z'":                                                    OK
          "f z@x z'@y = z":                                                     OK
          "f z@(Foo _) z'@y = z":                                               OK
          "f z@(Foo _) z'@(Bar _) = z":                                         OK
          "f z @ x y  = z":                                                     OK
          "f z @ (x : xs) = z: [x: xs]":                                        OK
          "f z @ (x : zs @ xs) = z: [x: zs]":                                   OK
          "f z @ (zz @x : zs @ xs) = z: [zz: zs]":                              OK
          "(*:) zzz@(x :+: y) z = x":                                           OK
          "(*:) zzz@(zx@x :+: zy@y) zz@z = x":                                  OK
          "(*:) zzz@((:+:) x y) z = x":                                         OK
          "(*:) zzz@((:+:) zs@x zs@y) zz@z = x":                                OK
          "f z@(!x) ~y = x":                                                    OK
        "f x Nothing = x\nf x (Just y) = y":                                    OK
        "x `f` Nothing = x\nx `f` (Just y) = y":                                OK
        "f x y = g x\n  where\n    g _ = y":                                    OK
        "x `f` y = x":                                                          OK
        "(|+|) x y = x":                                                        OK
        "x |+| y = x":                                                          OK
        "(!) x y = x":                                                          OK
        "--- my comment":                                                       OK
        "foo :: Rec -> Bar\nfoo Rec{..} = Bar (recField + 1)":                  OK
        "foo :: Rec -> Bar\nfoo Rec { bar = Baz {..}} = Bar (recField + 1)":    OK
        "pattern :: Int -> String -> [Int]":                                    OK
        "pattern x () = x + x":                                                 OK
        "pattern, foo :: Int -> String -> [Int]":                               OK
        "foo, pattern :: Int -> String -> [Int]":                               OK
        "foo, pattern, bar :: Int -> String -> [Int]":                          OK
        "pattern x = x ":                                                       OK
        "pattern x y = x + y":                                                  OK
        "x `pattern` y = x + y":                                                OK
        "pattern x y z = x + y + z":                                            OK
        "f forall = forall + 1":                                                OK
        "a # b = apply a b":                                                    OK
    class
      "class (X x) => C a b where\n\tm :: a->b\n\tn :: c\n":                    OK
      "class (X x) \8658 C a b where\n\tm \8759 a\8594b\n\tn \8759 c\n":        OK
      "class (X x) => C a b | a -> b where\n\tm :: a->b\n\tn :: c\n":           OK
      "class (X x) \8658 C a b | a \8594 b where\n\tm \8759 a\8594b\n\tn \87:   OK
      "class A a where f :: X\n":                                               OK
      "class X where\n\ta, (+) :: X\n":                                         OK
      "class X where\n\ta :: X\n\tb, c :: Y":                                   OK
      "class X\n\twhere\n\ta :: X\n\tb, c :: Y":                                OK
      "class X\n\twhere\n\ta ::\n\t\tX\n\tb :: Y":                              OK
      "class a :<: b where\n    f :: a -> b":                                   OK
      "class (:<:) a b where\n    f :: a -> b":                                 OK
      "class Eq a => a :<: b where\n    f :: a -> b":                           OK
      "class a ~ 'Foo => a :<: b where\n    f :: a -> b":                       OK
      "class 'Foo ~ a => a :<: b where\n    f :: a -> b":                       OK
      "class (Eq a) => a :<: b where\n    f :: a -> b":                         OK
      "class (a ~ 'Foo) => a :<: b where\n    f :: a -> b":                     OK
      "class ('Foo ~ a) => a :<: b where\n    f :: a -> b":                     OK
      "class a :<<<: b => a :<: b where\n    f :: a -> b":                      OK
      "class (a :<<<: b) => a :<: b where\n    f :: a -> b":                    OK
      "class (a :<<<: b) \8658 a :<: b where\n    f \8759 a \8594 b":           OK
      "class (Eq a, Ord b) => a :<: b where\n    f :: a -> b":                  OK
      "class (Eq a, Ord b) => (a :: (* -> *) -> *) :<: b where\n    f :: a -:   OK
      "class (Eq (a), Ord (f a [a])) => f `Z` a":                               OK
      "class A f where\n  data F f :: *\n  g :: a -> f a\n  h :: f a -> a":     OK
      "class A f where\n  data F f :: *\n  mkF :: f -> F f\n  getF :: F f ->:   OK
      "class A f where\n  data F f :: * -- foo\n                -- bar\n    :   OK
      "class X a where\n\tfoo :: Eq a => a -> a\n":                             OK
      "class Category cat where\n    -- | the identity morphism\n    id :: c:   OK
      "class Match a b where\n    pattern :: Pattern a b\n":                    OK
      "class a ~~ b => (a :: k) ~ (b :: k) | a -> b, b -> a":                   OK
      "class a ~~ b => (a :: k) ! (b :: k) | a -> b, b -> a":                   OK
      "class A f where {\n  data F f :: * ; -- foo\n                  -- bar:   OK
    instance
      "instance Foo Quux where\n  data Bar Quux a = QBar { frob :: a }\n    :   OK
      "instance Foo Quux where\n  data Bar Quux a = QBar a | QBaz String der:   OK
      "instance Foo Quux where\n  data Bar Quux a = QBar { frob :: a }\n    :   OK
      "instance Foo Quux where\n  data Bar Quux a = QBar { frob :: a }\n    :   OK
      "instance Foo Int where foo _ = 1":                                       OK
      "instance Foo Quux where\n  newtype Bar Quux a = QBar a \n            :   OK
      "instance Foo Quux where\n  newtype Bar Quux a = QBar { frob :: a }":     OK
      "instance (Monoid w, MBC b m) => MBC b (JournalT w m) where\n   newtyp:   OK
    Literate
      "> class (X x) => C a b where\n>\tm :: a->b\n>\tn :: c\n":                OK
      "Test\n\\begin{code}\nclass (X x) => C a b where\n\tm :: a->b\n\tn :: :   OK
      "> precalcClosure0 :: Grammar -> Name -> RuleList\n> precalcClosure0 g:   OK
      "New Resolutions by Jean-Luc Ponty, Scott O'Neil, and John Garvin\r\n\:   OK
    patterns
      "pattern Arrow a b = ConsT \"->\" [a, b]":                                OK
      "pattern Arrow a b = ConsT \"->\" [a, b]\npattern Pair a b = [a, b]":     OK
      "pattern Sub a b = Op '-' [a, b]\npattern Pair a b = [a, b]":             OK
      "pattern (:++) x y = [x, y]":                                             OK
      "pattern x :** y = [x, y]":                                               OK
      "pattern Nil :: Vec2 a\npattern Nil = Vec2 []\n":                         OK
      "pattern (:>) x xs <- ((\\ys -> (head $ unvec2 ys,Vec2 . tail $ unvec2:   OK
      "\ndata Foo = Foo_ { _foo :: !(Last String) } deriving (Eq)\nnpattern :   OK
      "\ndata Foo = Foo_ { _foo :: !(Last String), _bar :: !(Last String) } :   OK
    ffi
      "foreign import ccall foo :: Double -> IO Double":                        OK
      "foreign import unsafe java foo :: Double -> IO Double":                  OK
      "foreign import safe stdcall foo :: Double -> IO Double":                 OK
      "foreign import safe stdcall pattern :: Double -> IO Double":             OK
    preprocessor defines
      "#define FOO 1":                                                          OK
      "#define FOO \n 1":                                                       OK
      "#define FOO \n1":                                                        OK
      "#define FOO(x) (x + x)":                                                 OK
      "#if X\n#define FOO 1\n#else\n#define FOO 2\n#endif":                     OK
      "#if X\n\n#define FOO 1\n\n\n#else\n\n\n#define FOO 2\n\n#endif":         OK
      "#define FOO(x) (x + x)":                                                 OK
      "#let BAR x y z = \"x + y + z\"":                                         OK
    hsc2hs
      "#{enum ControlOp, ControlOp\n , controlOpAdd    = EPOLL_CTL_ADD\n , c:   OK
      "#{\nenum ControlOp, ControlOp\n , controlOpAdd    = EPOLL_CTL_ADD\n ,:   OK
      "#{enum Test1, Test2 \n , foo\n , foo_bar\n , BAR_BAZ\n , BAR_BAZquux\:   OK
      "#enum Mask, UserSpace, IN_ACCESS, IN_MODIFY, IN_ATTRIB, IN_CLOSE_WRIT:   OK
      "#enum ExecOption,ExecOption, \\\n  execAnchored = PCRE_ANCHORED, \\\n:   OK
      "#enum ReturnCode,ReturnCode, \\\n  retNoMatch = PCRE_ERROR_NOMATCH, \:   OK
      "#{\ndefine hsc_patsyn(l, typ, cons, hprefix, recmac) { \\\n  struct {:   OK
    alex
      vanilla
        "{\nmodule AlexTest where\n\nimport FooBar\n\nfoobar :: Int -> Int\nfo: OK
      literate
        "Very useful description 1\nVery useful description 2\n> {\n> module A: OK
        "Very useful description 1\nVery useful description 2\n\\begin{code}\n: OK
    happy
      vanilla
        "{\n{-# OPTIONS_GHC -w #-}\nmodule AttrGrammarParser (agParser) where\: OK
      literate
        "This parser parses the contents of the attribute grammar\ninto a list: FAIL
          tests/MainTest.hs:2608:
          expected: (["AttrGrammarParser","happyError","test"],[])
           but got: (["AttrGrammarParser"],[])
          Use -p '$0=="tests.process.happy.literate.\"This parser parses the contents of the attribute grammar\\ninto a list"' to rerun this test only.
        "This parser parses the contents of the attribute grammar\ninto a list: OK

1 out of 479 tests failed (0.02s)

Seems like the test suite is flaky?