diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,15 @@
+1.22.0 --> 1.23.0
+=================
+* Add support for BlockArguments (#444)
+  - Technically breaking change: KnownExtension gained a new constructor BlockArguments
+* Add support for Arrow Brackets (#445)
+  - Tecnically breaking change: Exp gained new constructor ArrOp
+
 1.21.1 --> 1.22.0
 =================
+* Support QuantifiedConstraints (#427)
+  - Breaking change: constructors for PAsst changed
+  - Technically breaking change: KnownExtention gained a new constructor QuantifiedConstraints
 * Support Template Haskell typed splices and quotations (#432)
   - Breaking change: new constructors on Token data type
 * Fix unicode identifier parsing (#442)
diff --git a/haskell-src-exts.cabal b/haskell-src-exts.cabal
--- a/haskell-src-exts.cabal
+++ b/haskell-src-exts.cabal
@@ -1,5 +1,5 @@
 Name:                   haskell-src-exts
-Version:                1.22.0
+Version:                1.23.0
 License:                BSD3
 License-File:           LICENSE
 Build-Type:             Simple
diff --git a/src/Language/Haskell/Exts/ExactPrint.hs b/src/Language/Haskell/Exts/ExactPrint.hs
--- a/src/Language/Haskell/Exts/ExactPrint.hs
+++ b/src/Language/Haskell/Exts/ExactPrint.hs
@@ -1727,6 +1727,13 @@
             exactPC e2
          _ -> errorEP "ExactP: Exp: RightArrHighApp is given wrong number of srcInfoPoints"
 
+    ArrOp l e -> case srcInfoPoints l of
+      [a, b] -> do
+        printStringAt (pos a) "(|"
+        exactPC e
+        printStringAt (pos b) "|)"
+      _ -> errorEP "ExactP: Exp: ArrOp is given wrong number of srcInfoPoints"
+
     LCase l alts   ->
         case srcInfoPoints l of
          _:b:pts -> do
diff --git a/src/Language/Haskell/Exts/Extension.hs b/src/Language/Haskell/Exts/Extension.hs
--- a/src/Language/Haskell/Exts/Extension.hs
+++ b/src/Language/Haskell/Exts/Extension.hs
@@ -558,6 +558,8 @@
 
   | QuantifiedConstraints
 
+  | BlockArguments
+
   deriving (Show, Read, Eq, Ord, Enum, Bounded, Data, Typeable)
 
 -- | Certain extensions imply other extensions, and this function
diff --git a/src/Language/Haskell/Exts/InternalLexer.hs b/src/Language/Haskell/Exts/InternalLexer.hs
--- a/src/Language/Haskell/Exts/InternalLexer.hs
+++ b/src/Language/Haskell/Exts/InternalLexer.hs
@@ -99,6 +99,8 @@
         | RightArrowTail        -- >-
         | LeftDblArrowTail      -- -<<
         | RightDblArrowTail     -- >>-
+        | OpenArrowBracket      -- (|
+        | CloseArrowBracket     -- |)
 
 -- Template Haskell
         | THExpQuote            -- [| or [e|
@@ -685,13 +687,12 @@
         -- end implicit parameters
 
         -- harp
---        '(':'|':c:_  | isHSymbol c -> discard 1 >> return LeftParen
         '(':'|':c:_ | RegularPatterns `elem` exts && not (isHSymbol c) ->
-                     do discard 2
-                        return RPGuardOpen
-        '|':')':_ | RegularPatterns `elem` exts ->
-                     do discard 2
-                        return RPGuardClose
+                        discard 2 >> return RPGuardOpen
+                    | Arrows `elem` exts && not (isHSymbol c) ->
+                        discard 2 >> return OpenArrowBracket
+        '|':')':_ | RegularPatterns `elem` exts -> discard 2 >> return RPGuardClose
+                  | Arrows `elem` exts -> discard 2 >> return CloseArrowBracket
         {- This is handled by the reserved_ops above.
         '@':':':_ | RegularPatterns `elem` exts ->
                      do discard 2
@@ -1375,6 +1376,8 @@
   RightArrowTail    -> ">-"
   LeftDblArrowTail  -> "-<<"
   RightDblArrowTail -> ">>-"
+  OpenArrowBracket  -> "(|"
+  CloseArrowBracket -> "|)"
   THExpQuote        -> "[|"
   THTExpQuote       -> "[||"
   THPatQuote        -> "[p|"
diff --git a/src/Language/Haskell/Exts/InternalParser.ly b/src/Language/Haskell/Exts/InternalParser.ly
--- a/src/Language/Haskell/Exts/InternalParser.ly
+++ b/src/Language/Haskell/Exts/InternalParser.ly
@@ -172,11 +172,13 @@
 >       '>-'    { Loc $$ RightArrowTail }
 >       '-<<'   { Loc $$ LeftDblArrowTail }
 >       '>>-'   { Loc $$ RightDblArrowTail }
+>       '(|'    { Loc $$ OpenArrowBracket }
+>       '|)'    { Loc $$ CloseArrowBracket }
 
 Harp
 
->       '(|'    { Loc $$ RPGuardOpen }
->       '|)'    { Loc $$ RPGuardClose }
+>       '(/'    { Loc $$ RPGuardOpen }
+>       '/)'    { Loc $$ RPGuardClose }
 >       '@:'    { Loc $$ RPCAt }
 
 Template Haskell
@@ -1431,6 +1433,11 @@
 >       | exp10b                        { $1 }
 
 > exp10a :: { PExp L }
+>       : expblocka                     { $1 }
+>       | fexp expblocka                {% checkEnabled BlockArguments >>
+>                                          return (App ($1 <> $2) $1 $2) }
+
+> expblocka :: { PExp L }
 >       : '\\' apats '->' exp             { Lambda (nIS $1 <++> ann $4 <** [$1,$3]) (reverse $2) $4 }
 A let may bind implicit parameters
 >       | 'let' binds 'in' exp            { Let    (nIS $1 <++> ann $4 <** [$1,$3])    $2 $4 }
@@ -1455,14 +1462,17 @@
 mdo blocks require the RecursiveDo extension enabled, but the lexer handles that.
 
 > exp10b :: { PExp L }
+>       : expblockb                     { $1 }
+>       | '-' fexp                      { NegApp (nIS $1 <++> ann $2 <** [$1]) $2 }
+>       | fexp                          { $1 }
+
+> expblockb :: { PExp L }
 >       : 'case' exp 'of' altslist      { let (als, inf, ss) = $4 in Case (nIS $1 <++> inf <** ($1:$3:ss)) $2 als }
 >       | '\\' 'case' altslist          {% do { checkEnabled LambdaCase ;
 >                                               let { (als, inf, ss) = $3 } ;
 >                                               return (LCase (nIS $1 <++> inf <** ($1:$2:ss)) als) } }
->       | '-' fexp                      { NegApp (nIS $1 <++> ann $2 <** [$1]) $2 }
 >       | 'do'  stmtlist                { let (sts, inf, ss) = $2 in Do   (nIS $1 <++> inf <** $1:ss) sts }
 >       | 'mdo' stmtlist                { let (sts, inf, ss) = $2 in MDo  (nIS $1 <++> inf <** $1:ss) sts }
->       | fexp                          { $1 }
 
 > exppragma :: { PExp L }
 >       : '{-# CORE' STRING '#-}' exp   { let Loc l (StringTok (s,_)) = $2 in CorePragma (nIS $1 <++> ann $4 <** [l,$3]) s $4 }
@@ -1479,6 +1489,8 @@
 
 > fexp :: { PExp L }
 >       : fexp aexp                     { App ($1 <> $2) $1 $2 }
+>       | fexp expblockb                {% checkEnabled BlockArguments >>
+>                                          return (App ($1 <> $2) $1 $2) }
 >       | aexp                          { $1 }
 
 > apats :: { [Pat L] }
@@ -1538,8 +1550,9 @@
 >       | '[' list ']'                  { amap (\l -> l <** [$3]) $ $2 ($1 <^^> $3 <** [$1]) }
 >       | '[:' parr ':]'                { amap (\l -> l <** [$3]) $ $2 ($1 <^^> $3 <** [$1]) }
 >       | '(' erpats ')'                {% checkEnabled RegularPatterns >> return (Paren ($1 <^^> $3 <** [$1,$3]) $2) }
->       | '(|' sexps '|)'               { SeqRP ($1 <^^> $3 <** ($1:reverse (snd $2) ++ [$3])) $ reverse (fst $2) }
->       | '(|' exp '|' quals '|)'       { GuardRP ($1 <^^> $5 <** ($1:$3 : snd $4 ++ [$5])) $2 $ (reverse $ fst $4) }
+>       | '(|' exp '|)'                 { ArrOp ($1 <^^> $3 <** [$1,$3]) $2 }
+>       | '(/' sexps '/)'               { SeqRP ($1 <^^> $3 <** ($1:reverse (snd $2) ++ [$3])) $ reverse (fst $2) }
+>       | '(/' exp '|' quals '/)'       { GuardRP ($1 <^^> $5 <** ($1:$3 : snd $4 ++ [$5])) $2 $ (reverse $ fst $4) }
 >       | xml                           { $1 }
 
 
diff --git a/src/Language/Haskell/Exts/ParseSyntax.hs b/src/Language/Haskell/Exts/ParseSyntax.hs
--- a/src/Language/Haskell/Exts/ParseSyntax.hs
+++ b/src/Language/Haskell/Exts/ParseSyntax.hs
@@ -101,6 +101,7 @@
     | RightArrApp     l (PExp l) (PExp l)   -- ^ e >- e
     | LeftArrHighApp  l (PExp l) (PExp l)   -- ^ e -<< e
     | RightArrHighApp l (PExp l) (PExp l)   -- ^ e >>- e
+    | ArrOp l (PExp l)                      -- ^ (| e |)
 
 -- LambdaCase
     | LCase l [Alt l]                       -- ^ @\case@ /alts/
@@ -183,6 +184,7 @@
         RightArrApp     l _ _   -> l
         LeftArrHighApp  l _ _   -> l
         RightArrHighApp l _ _   -> l
+        ArrOp           l _     -> l
 
         LCase l _               -> l
         MultiIf l _             -> l
@@ -255,6 +257,7 @@
         RightArrApp     l e1 e2 -> RightArrApp     (f l) e1 e2
         LeftArrHighApp  l e1 e2 -> LeftArrHighApp  (f l) e1 e2
         RightArrHighApp l e1 e2 -> RightArrHighApp (f l) e1 e2
+        ArrOp           l e     -> ArrOp           (f l) e
 
         LCase l alts -> LCase (f l) alts
         MultiIf l alts -> MultiIf (f l) alts
diff --git a/src/Language/Haskell/Exts/ParseUtils.hs b/src/Language/Haskell/Exts/ParseUtils.hs
--- a/src/Language/Haskell/Exts/ParseUtils.hs
+++ b/src/Language/Haskell/Exts/ParseUtils.hs
@@ -737,6 +737,7 @@
     RightArrApp l e1 e2     -> check2Exprs e1 e2 (S.RightArrApp l)
     LeftArrHighApp l e1 e2  -> check2Exprs e1 e2 (S.LeftArrHighApp l)
     RightArrHighApp l e1 e2 -> check2Exprs e1 e2 (S.RightArrHighApp l)
+    ArrOp l e               -> S.ArrOp l <$> checkExpr e
 
     -- LamdaCase
     LCase l alts -> return $ S.LCase l alts
diff --git a/src/Language/Haskell/Exts/Pretty.hs b/src/Language/Haskell/Exts/Pretty.hs
--- a/src/Language/Haskell/Exts/Pretty.hs
+++ b/src/Language/Haskell/Exts/Pretty.hs
@@ -1081,6 +1081,7 @@
         prettyPrec p (RightArrApp _ l r)     = parensIf (p > 0) $ myFsep [pretty l, text ">-",  pretty r]
         prettyPrec p (LeftArrHighApp _ l r)  = parensIf (p > 0) $ myFsep [pretty l, text "-<<", pretty r]
         prettyPrec p (RightArrHighApp _ l r) = parensIf (p > 0) $ myFsep [pretty l, text ">>-", pretty r]
+        prettyPrec _ (ArrOp _ e) = myFsep [text "(|", pretty e, text "|)"]
 
         -- LamdaCase
         prettyPrec p (LCase _ altList) = parensIf (p > 1) $
@@ -1626,6 +1627,7 @@
         pretty (P.RightArrApp _ l r)     = myFsep [pretty l, text ">-",  pretty r]
         pretty (P.LeftArrHighApp _ l r)  = myFsep [pretty l, text "-<<", pretty r]
         pretty (P.RightArrHighApp _ l r) = myFsep [pretty l, text ">>-", pretty r]
+        pretty (P.ArrOp _ e) = myFsep [text "(|", pretty e, text "|)"]
         pretty (P.AsPat _ name (P.IrrPat _ pat)) =
                 myFsep [pretty name <> char '@', char '~' <> pretty pat]
         pretty (P.AsPat _ name pat) =
diff --git a/src/Language/Haskell/Exts/Syntax.hs b/src/Language/Haskell/Exts/Syntax.hs
--- a/src/Language/Haskell/Exts/Syntax.hs
+++ b/src/Language/Haskell/Exts/Syntax.hs
@@ -800,6 +800,7 @@
     | RightArrApp     l (Exp l) (Exp l)     -- ^ arrow application (from right): /exp/ @>-@ /exp/
     | LeftArrHighApp  l (Exp l) (Exp l)     -- ^ higher-order arrow application (from left): /exp/ @-<<@ /exp/
     | RightArrHighApp l (Exp l) (Exp l)     -- ^ higher-order arrow application (from right): /exp/ @>>-@ /exp/
+    | ArrOp           l (Exp l)             -- ^ arrow control operators: @(| /exp/ |)@
 
 -- LambdaCase
     | LCase l [Alt l]                       -- ^ @\case@ /alts/
@@ -1655,6 +1656,7 @@
         RightArrApp     l _ _  -> l
         LeftArrHighApp  l _ _  -> l
         RightArrHighApp l _ _  -> l
+        ArrOp           l _    -> l
 
         LCase l _              -> l
 
@@ -1715,6 +1717,7 @@
         RightArrApp     l e1' e2 -> RightArrApp     (f l) e1' e2
         LeftArrHighApp  l e1' e2 -> LeftArrHighApp  (f l) e1' e2
         RightArrHighApp l e1' e2 -> RightArrHighApp (f l) e1' e2
+        ArrOp           l e      -> ArrOp           (f l) e
 
         LCase l alts -> LCase (f l) alts
         MultiIf l alts -> MultiIf (f l) alts
diff --git a/tests/examples/ArrowBrackets.hs b/tests/examples/ArrowBrackets.hs
new file mode 100644
--- /dev/null
+++ b/tests/examples/ArrowBrackets.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE Arrows #-}
+module ArrowBrackets where
+
+foo = proc (x, y) -> (| f (g -< x) |) y
+
+bar = proc (x, y) -> do
+  z <- (| f (g -< x) |) y
+  (| f (h -< z) |) y
diff --git a/tests/examples/ArrowBrackets.hs.exactprinter.golden b/tests/examples/ArrowBrackets.hs.exactprinter.golden
new file mode 100644
--- /dev/null
+++ b/tests/examples/ArrowBrackets.hs.exactprinter.golden
@@ -0,0 +1,1 @@
+Match
diff --git a/tests/examples/ArrowBrackets.hs.parser.golden b/tests/examples/ArrowBrackets.hs.parser.golden
new file mode 100644
--- /dev/null
+++ b/tests/examples/ArrowBrackets.hs.parser.golden
@@ -0,0 +1,541 @@
+ParseOk
+  ( Module
+      SrcSpanInfo
+        { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 1 1 9 1
+        , srcInfoPoints =
+            [ SrcSpan "tests/examples/ArrowBrackets.hs" 1 1 1 1
+            , SrcSpan "tests/examples/ArrowBrackets.hs" 2 1 2 1
+            , SrcSpan "tests/examples/ArrowBrackets.hs" 2 1 2 1
+            , SrcSpan "tests/examples/ArrowBrackets.hs" 4 1 4 1
+            , SrcSpan "tests/examples/ArrowBrackets.hs" 6 1 6 1
+            , SrcSpan "tests/examples/ArrowBrackets.hs" 9 1 9 1
+            , SrcSpan "tests/examples/ArrowBrackets.hs" 9 1 9 1
+            ]
+        }
+      (Just
+         (ModuleHead
+            SrcSpanInfo
+              { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 2 1 2 27
+              , srcInfoPoints =
+                  [ SrcSpan "tests/examples/ArrowBrackets.hs" 2 1 2 7
+                  , SrcSpan "tests/examples/ArrowBrackets.hs" 2 22 2 27
+                  ]
+              }
+            (ModuleName
+               SrcSpanInfo
+                 { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 2 8 2 21
+                 , srcInfoPoints = []
+                 }
+               "ArrowBrackets")
+            Nothing
+            Nothing))
+      [ LanguagePragma
+          SrcSpanInfo
+            { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 1 1 1 24
+            , srcInfoPoints =
+                [ SrcSpan "tests/examples/ArrowBrackets.hs" 1 1 1 13
+                , SrcSpan "tests/examples/ArrowBrackets.hs" 1 21 1 24
+                ]
+            }
+          [ Ident
+              SrcSpanInfo
+                { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 1 14 1 20
+                , srcInfoPoints = []
+                }
+              "Arrows"
+          ]
+      ]
+      []
+      [ PatBind
+          SrcSpanInfo
+            { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 1 4 40
+            , srcInfoPoints = []
+            }
+          (PVar
+             SrcSpanInfo
+               { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 1 4 4
+               , srcInfoPoints = []
+               }
+             (Ident
+                SrcSpanInfo
+                  { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 1 4 4
+                  , srcInfoPoints = []
+                  }
+                "foo"))
+          (UnGuardedRhs
+             SrcSpanInfo
+               { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 5 4 40
+               , srcInfoPoints =
+                   [ SrcSpan "tests/examples/ArrowBrackets.hs" 4 5 4 6 ]
+               }
+             (Proc
+                SrcSpanInfo
+                  { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 7 4 40
+                  , srcInfoPoints =
+                      [ SrcSpan "tests/examples/ArrowBrackets.hs" 4 7 4 11
+                      , SrcSpan "tests/examples/ArrowBrackets.hs" 4 19 4 21
+                      ]
+                  }
+                (PTuple
+                   SrcSpanInfo
+                     { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 12 4 18
+                     , srcInfoPoints =
+                         [ SrcSpan "tests/examples/ArrowBrackets.hs" 4 12 4 13
+                         , SrcSpan "tests/examples/ArrowBrackets.hs" 4 14 4 15
+                         , SrcSpan "tests/examples/ArrowBrackets.hs" 4 17 4 18
+                         ]
+                     }
+                   Boxed
+                   [ PVar
+                       SrcSpanInfo
+                         { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 13 4 14
+                         , srcInfoPoints = []
+                         }
+                       (Ident
+                          SrcSpanInfo
+                            { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 13 4 14
+                            , srcInfoPoints = []
+                            }
+                          "x")
+                   , PVar
+                       SrcSpanInfo
+                         { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 16 4 17
+                         , srcInfoPoints = []
+                         }
+                       (Ident
+                          SrcSpanInfo
+                            { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 16 4 17
+                            , srcInfoPoints = []
+                            }
+                          "y")
+                   ])
+                (App
+                   SrcSpanInfo
+                     { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 22 4 40
+                     , srcInfoPoints = []
+                     }
+                   (ArrOp
+                      SrcSpanInfo
+                        { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 22 4 38
+                        , srcInfoPoints =
+                            [ SrcSpan "tests/examples/ArrowBrackets.hs" 4 22 4 24
+                            , SrcSpan "tests/examples/ArrowBrackets.hs" 4 36 4 38
+                            ]
+                        }
+                      (App
+                         SrcSpanInfo
+                           { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 25 4 35
+                           , srcInfoPoints = []
+                           }
+                         (Var
+                            SrcSpanInfo
+                              { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 25 4 26
+                              , srcInfoPoints = []
+                              }
+                            (UnQual
+                               SrcSpanInfo
+                                 { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 25 4 26
+                                 , srcInfoPoints = []
+                                 }
+                               (Ident
+                                  SrcSpanInfo
+                                    { srcInfoSpan =
+                                        SrcSpan "tests/examples/ArrowBrackets.hs" 4 25 4 26
+                                    , srcInfoPoints = []
+                                    }
+                                  "f")))
+                         (Paren
+                            SrcSpanInfo
+                              { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 27 4 35
+                              , srcInfoPoints =
+                                  [ SrcSpan "tests/examples/ArrowBrackets.hs" 4 27 4 28
+                                  , SrcSpan "tests/examples/ArrowBrackets.hs" 4 34 4 35
+                                  ]
+                              }
+                            (LeftArrApp
+                               SrcSpanInfo
+                                 { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 28 4 34
+                                 , srcInfoPoints =
+                                     [ SrcSpan "tests/examples/ArrowBrackets.hs" 4 30 4 32 ]
+                                 }
+                               (Var
+                                  SrcSpanInfo
+                                    { srcInfoSpan =
+                                        SrcSpan "tests/examples/ArrowBrackets.hs" 4 28 4 29
+                                    , srcInfoPoints = []
+                                    }
+                                  (UnQual
+                                     SrcSpanInfo
+                                       { srcInfoSpan =
+                                           SrcSpan "tests/examples/ArrowBrackets.hs" 4 28 4 29
+                                       , srcInfoPoints = []
+                                       }
+                                     (Ident
+                                        SrcSpanInfo
+                                          { srcInfoSpan =
+                                              SrcSpan "tests/examples/ArrowBrackets.hs" 4 28 4 29
+                                          , srcInfoPoints = []
+                                          }
+                                        "g")))
+                               (Var
+                                  SrcSpanInfo
+                                    { srcInfoSpan =
+                                        SrcSpan "tests/examples/ArrowBrackets.hs" 4 33 4 34
+                                    , srcInfoPoints = []
+                                    }
+                                  (UnQual
+                                     SrcSpanInfo
+                                       { srcInfoSpan =
+                                           SrcSpan "tests/examples/ArrowBrackets.hs" 4 33 4 34
+                                       , srcInfoPoints = []
+                                       }
+                                     (Ident
+                                        SrcSpanInfo
+                                          { srcInfoSpan =
+                                              SrcSpan "tests/examples/ArrowBrackets.hs" 4 33 4 34
+                                          , srcInfoPoints = []
+                                          }
+                                        "x")))))))
+                   (Var
+                      SrcSpanInfo
+                        { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 39 4 40
+                        , srcInfoPoints = []
+                        }
+                      (UnQual
+                         SrcSpanInfo
+                           { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 39 4 40
+                           , srcInfoPoints = []
+                           }
+                         (Ident
+                            SrcSpanInfo
+                              { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 4 39 4 40
+                              , srcInfoPoints = []
+                              }
+                            "y"))))))
+          Nothing
+      , PatBind
+          SrcSpanInfo
+            { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 1 8 21
+            , srcInfoPoints = []
+            }
+          (PVar
+             SrcSpanInfo
+               { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 1 6 4
+               , srcInfoPoints = []
+               }
+             (Ident
+                SrcSpanInfo
+                  { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 1 6 4
+                  , srcInfoPoints = []
+                  }
+                "bar"))
+          (UnGuardedRhs
+             SrcSpanInfo
+               { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 5 8 21
+               , srcInfoPoints =
+                   [ SrcSpan "tests/examples/ArrowBrackets.hs" 6 5 6 6 ]
+               }
+             (Proc
+                SrcSpanInfo
+                  { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 7 8 21
+                  , srcInfoPoints =
+                      [ SrcSpan "tests/examples/ArrowBrackets.hs" 6 7 6 11
+                      , SrcSpan "tests/examples/ArrowBrackets.hs" 6 19 6 21
+                      ]
+                  }
+                (PTuple
+                   SrcSpanInfo
+                     { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 12 6 18
+                     , srcInfoPoints =
+                         [ SrcSpan "tests/examples/ArrowBrackets.hs" 6 12 6 13
+                         , SrcSpan "tests/examples/ArrowBrackets.hs" 6 14 6 15
+                         , SrcSpan "tests/examples/ArrowBrackets.hs" 6 17 6 18
+                         ]
+                     }
+                   Boxed
+                   [ PVar
+                       SrcSpanInfo
+                         { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 13 6 14
+                         , srcInfoPoints = []
+                         }
+                       (Ident
+                          SrcSpanInfo
+                            { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 13 6 14
+                            , srcInfoPoints = []
+                            }
+                          "x")
+                   , PVar
+                       SrcSpanInfo
+                         { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 16 6 17
+                         , srcInfoPoints = []
+                         }
+                       (Ident
+                          SrcSpanInfo
+                            { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 16 6 17
+                            , srcInfoPoints = []
+                            }
+                          "y")
+                   ])
+                (Do
+                   SrcSpanInfo
+                     { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 6 22 8 21
+                     , srcInfoPoints =
+                         [ SrcSpan "tests/examples/ArrowBrackets.hs" 6 22 6 24
+                         , SrcSpan "tests/examples/ArrowBrackets.hs" 7 3 7 3
+                         , SrcSpan "tests/examples/ArrowBrackets.hs" 8 3 8 3
+                         , SrcSpan "tests/examples/ArrowBrackets.hs" 9 1 9 0
+                         ]
+                     }
+                   [ Generator
+                       SrcSpanInfo
+                         { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 7 3 7 26
+                         , srcInfoPoints =
+                             [ SrcSpan "tests/examples/ArrowBrackets.hs" 7 5 7 7 ]
+                         }
+                       (PVar
+                          SrcSpanInfo
+                            { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 7 3 7 4
+                            , srcInfoPoints = []
+                            }
+                          (Ident
+                             SrcSpanInfo
+                               { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 7 3 7 4
+                               , srcInfoPoints = []
+                               }
+                             "z"))
+                       (App
+                          SrcSpanInfo
+                            { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 7 8 7 26
+                            , srcInfoPoints = []
+                            }
+                          (ArrOp
+                             SrcSpanInfo
+                               { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 7 8 7 24
+                               , srcInfoPoints =
+                                   [ SrcSpan "tests/examples/ArrowBrackets.hs" 7 8 7 10
+                                   , SrcSpan "tests/examples/ArrowBrackets.hs" 7 22 7 24
+                                   ]
+                               }
+                             (App
+                                SrcSpanInfo
+                                  { srcInfoSpan =
+                                      SrcSpan "tests/examples/ArrowBrackets.hs" 7 11 7 21
+                                  , srcInfoPoints = []
+                                  }
+                                (Var
+                                   SrcSpanInfo
+                                     { srcInfoSpan =
+                                         SrcSpan "tests/examples/ArrowBrackets.hs" 7 11 7 12
+                                     , srcInfoPoints = []
+                                     }
+                                   (UnQual
+                                      SrcSpanInfo
+                                        { srcInfoSpan =
+                                            SrcSpan "tests/examples/ArrowBrackets.hs" 7 11 7 12
+                                        , srcInfoPoints = []
+                                        }
+                                      (Ident
+                                         SrcSpanInfo
+                                           { srcInfoSpan =
+                                               SrcSpan "tests/examples/ArrowBrackets.hs" 7 11 7 12
+                                           , srcInfoPoints = []
+                                           }
+                                         "f")))
+                                (Paren
+                                   SrcSpanInfo
+                                     { srcInfoSpan =
+                                         SrcSpan "tests/examples/ArrowBrackets.hs" 7 13 7 21
+                                     , srcInfoPoints =
+                                         [ SrcSpan "tests/examples/ArrowBrackets.hs" 7 13 7 14
+                                         , SrcSpan "tests/examples/ArrowBrackets.hs" 7 20 7 21
+                                         ]
+                                     }
+                                   (LeftArrApp
+                                      SrcSpanInfo
+                                        { srcInfoSpan =
+                                            SrcSpan "tests/examples/ArrowBrackets.hs" 7 14 7 20
+                                        , srcInfoPoints =
+                                            [ SrcSpan "tests/examples/ArrowBrackets.hs" 7 16 7 18 ]
+                                        }
+                                      (Var
+                                         SrcSpanInfo
+                                           { srcInfoSpan =
+                                               SrcSpan "tests/examples/ArrowBrackets.hs" 7 14 7 15
+                                           , srcInfoPoints = []
+                                           }
+                                         (UnQual
+                                            SrcSpanInfo
+                                              { srcInfoSpan =
+                                                  SrcSpan
+                                                    "tests/examples/ArrowBrackets.hs" 7 14 7 15
+                                              , srcInfoPoints = []
+                                              }
+                                            (Ident
+                                               SrcSpanInfo
+                                                 { srcInfoSpan =
+                                                     SrcSpan
+                                                       "tests/examples/ArrowBrackets.hs" 7 14 7 15
+                                                 , srcInfoPoints = []
+                                                 }
+                                               "g")))
+                                      (Var
+                                         SrcSpanInfo
+                                           { srcInfoSpan =
+                                               SrcSpan "tests/examples/ArrowBrackets.hs" 7 19 7 20
+                                           , srcInfoPoints = []
+                                           }
+                                         (UnQual
+                                            SrcSpanInfo
+                                              { srcInfoSpan =
+                                                  SrcSpan
+                                                    "tests/examples/ArrowBrackets.hs" 7 19 7 20
+                                              , srcInfoPoints = []
+                                              }
+                                            (Ident
+                                               SrcSpanInfo
+                                                 { srcInfoSpan =
+                                                     SrcSpan
+                                                       "tests/examples/ArrowBrackets.hs" 7 19 7 20
+                                                 , srcInfoPoints = []
+                                                 }
+                                               "x")))))))
+                          (Var
+                             SrcSpanInfo
+                               { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 7 25 7 26
+                               , srcInfoPoints = []
+                               }
+                             (UnQual
+                                SrcSpanInfo
+                                  { srcInfoSpan =
+                                      SrcSpan "tests/examples/ArrowBrackets.hs" 7 25 7 26
+                                  , srcInfoPoints = []
+                                  }
+                                (Ident
+                                   SrcSpanInfo
+                                     { srcInfoSpan =
+                                         SrcSpan "tests/examples/ArrowBrackets.hs" 7 25 7 26
+                                     , srcInfoPoints = []
+                                     }
+                                   "y"))))
+                   , Qualifier
+                       SrcSpanInfo
+                         { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 8 3 8 21
+                         , srcInfoPoints = []
+                         }
+                       (App
+                          SrcSpanInfo
+                            { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 8 3 8 21
+                            , srcInfoPoints = []
+                            }
+                          (ArrOp
+                             SrcSpanInfo
+                               { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 8 3 8 19
+                               , srcInfoPoints =
+                                   [ SrcSpan "tests/examples/ArrowBrackets.hs" 8 3 8 5
+                                   , SrcSpan "tests/examples/ArrowBrackets.hs" 8 17 8 19
+                                   ]
+                               }
+                             (App
+                                SrcSpanInfo
+                                  { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 8 6 8 16
+                                  , srcInfoPoints = []
+                                  }
+                                (Var
+                                   SrcSpanInfo
+                                     { srcInfoSpan =
+                                         SrcSpan "tests/examples/ArrowBrackets.hs" 8 6 8 7
+                                     , srcInfoPoints = []
+                                     }
+                                   (UnQual
+                                      SrcSpanInfo
+                                        { srcInfoSpan =
+                                            SrcSpan "tests/examples/ArrowBrackets.hs" 8 6 8 7
+                                        , srcInfoPoints = []
+                                        }
+                                      (Ident
+                                         SrcSpanInfo
+                                           { srcInfoSpan =
+                                               SrcSpan "tests/examples/ArrowBrackets.hs" 8 6 8 7
+                                           , srcInfoPoints = []
+                                           }
+                                         "f")))
+                                (Paren
+                                   SrcSpanInfo
+                                     { srcInfoSpan =
+                                         SrcSpan "tests/examples/ArrowBrackets.hs" 8 8 8 16
+                                     , srcInfoPoints =
+                                         [ SrcSpan "tests/examples/ArrowBrackets.hs" 8 8 8 9
+                                         , SrcSpan "tests/examples/ArrowBrackets.hs" 8 15 8 16
+                                         ]
+                                     }
+                                   (LeftArrApp
+                                      SrcSpanInfo
+                                        { srcInfoSpan =
+                                            SrcSpan "tests/examples/ArrowBrackets.hs" 8 9 8 15
+                                        , srcInfoPoints =
+                                            [ SrcSpan "tests/examples/ArrowBrackets.hs" 8 11 8 13 ]
+                                        }
+                                      (Var
+                                         SrcSpanInfo
+                                           { srcInfoSpan =
+                                               SrcSpan "tests/examples/ArrowBrackets.hs" 8 9 8 10
+                                           , srcInfoPoints = []
+                                           }
+                                         (UnQual
+                                            SrcSpanInfo
+                                              { srcInfoSpan =
+                                                  SrcSpan "tests/examples/ArrowBrackets.hs" 8 9 8 10
+                                              , srcInfoPoints = []
+                                              }
+                                            (Ident
+                                               SrcSpanInfo
+                                                 { srcInfoSpan =
+                                                     SrcSpan
+                                                       "tests/examples/ArrowBrackets.hs" 8 9 8 10
+                                                 , srcInfoPoints = []
+                                                 }
+                                               "h")))
+                                      (Var
+                                         SrcSpanInfo
+                                           { srcInfoSpan =
+                                               SrcSpan "tests/examples/ArrowBrackets.hs" 8 14 8 15
+                                           , srcInfoPoints = []
+                                           }
+                                         (UnQual
+                                            SrcSpanInfo
+                                              { srcInfoSpan =
+                                                  SrcSpan
+                                                    "tests/examples/ArrowBrackets.hs" 8 14 8 15
+                                              , srcInfoPoints = []
+                                              }
+                                            (Ident
+                                               SrcSpanInfo
+                                                 { srcInfoSpan =
+                                                     SrcSpan
+                                                       "tests/examples/ArrowBrackets.hs" 8 14 8 15
+                                                 , srcInfoPoints = []
+                                                 }
+                                               "z")))))))
+                          (Var
+                             SrcSpanInfo
+                               { srcInfoSpan = SrcSpan "tests/examples/ArrowBrackets.hs" 8 20 8 21
+                               , srcInfoPoints = []
+                               }
+                             (UnQual
+                                SrcSpanInfo
+                                  { srcInfoSpan =
+                                      SrcSpan "tests/examples/ArrowBrackets.hs" 8 20 8 21
+                                  , srcInfoPoints = []
+                                  }
+                                (Ident
+                                   SrcSpanInfo
+                                     { srcInfoSpan =
+                                         SrcSpan "tests/examples/ArrowBrackets.hs" 8 20 8 21
+                                     , srcInfoPoints = []
+                                     }
+                                   "y"))))
+                   ])))
+          Nothing
+      ]
+  , []
+  )
diff --git a/tests/examples/ArrowBrackets.hs.prettyparser.golden b/tests/examples/ArrowBrackets.hs.prettyparser.golden
new file mode 100644
--- /dev/null
+++ b/tests/examples/ArrowBrackets.hs.prettyparser.golden
@@ -0,0 +1,1 @@
+Match
diff --git a/tests/examples/ArrowBrackets.hs.prettyprinter.golden b/tests/examples/ArrowBrackets.hs.prettyprinter.golden
new file mode 100644
--- /dev/null
+++ b/tests/examples/ArrowBrackets.hs.prettyprinter.golden
@@ -0,0 +1,7 @@
+{-# LANGUAGE Arrows #-}
+module ArrowBrackets where
+foo = proc (x, y) -> (| f (g -< x) |) y
+bar
+  = proc (x, y) ->
+      do z <- (| f (g -< x) |) y
+         (| f (h -< z) |) y
diff --git a/tests/examples/BlockArguments.hs b/tests/examples/BlockArguments.hs
new file mode 100644
--- /dev/null
+++ b/tests/examples/BlockArguments.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE BlockArguments #-}
+module BlockArguments where
+
+foo = when (x > 0) do
+  print x
+  exitFailure
+
+bar = withForeignPtr fptr \ptr -> c_memcpy buf ptr size
+
+baz arg1 arg2 arg3 arg4 = initialValue
+  &   someFunction arg1 arg2
+  >>= traverse \(x, y) -> do
+        a <- f x
+        b <- g y
+        h a b
+  >>= anotherFunction arg3 arg4
diff --git a/tests/examples/BlockArguments.hs.exactprinter.golden b/tests/examples/BlockArguments.hs.exactprinter.golden
new file mode 100644
--- /dev/null
+++ b/tests/examples/BlockArguments.hs.exactprinter.golden
@@ -0,0 +1,1 @@
+Match
diff --git a/tests/examples/BlockArguments.hs.parser.golden b/tests/examples/BlockArguments.hs.parser.golden
new file mode 100644
--- /dev/null
+++ b/tests/examples/BlockArguments.hs.parser.golden
@@ -0,0 +1,1099 @@
+ParseOk
+  ( Module
+      SrcSpanInfo
+        { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 1 1 17 1
+        , srcInfoPoints =
+            [ SrcSpan "tests/examples/BlockArguments.hs" 1 1 1 1
+            , SrcSpan "tests/examples/BlockArguments.hs" 2 1 2 1
+            , SrcSpan "tests/examples/BlockArguments.hs" 2 1 2 1
+            , SrcSpan "tests/examples/BlockArguments.hs" 4 1 4 1
+            , SrcSpan "tests/examples/BlockArguments.hs" 8 1 8 1
+            , SrcSpan "tests/examples/BlockArguments.hs" 10 1 10 1
+            , SrcSpan "tests/examples/BlockArguments.hs" 17 1 17 1
+            , SrcSpan "tests/examples/BlockArguments.hs" 17 1 17 1
+            ]
+        }
+      (Just
+         (ModuleHead
+            SrcSpanInfo
+              { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 2 1 2 28
+              , srcInfoPoints =
+                  [ SrcSpan "tests/examples/BlockArguments.hs" 2 1 2 7
+                  , SrcSpan "tests/examples/BlockArguments.hs" 2 23 2 28
+                  ]
+              }
+            (ModuleName
+               SrcSpanInfo
+                 { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 2 8 2 22
+                 , srcInfoPoints = []
+                 }
+               "BlockArguments")
+            Nothing
+            Nothing))
+      [ LanguagePragma
+          SrcSpanInfo
+            { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 1 1 1 32
+            , srcInfoPoints =
+                [ SrcSpan "tests/examples/BlockArguments.hs" 1 1 1 13
+                , SrcSpan "tests/examples/BlockArguments.hs" 1 29 1 32
+                ]
+            }
+          [ Ident
+              SrcSpanInfo
+                { srcInfoSpan =
+                    SrcSpan "tests/examples/BlockArguments.hs" 1 14 1 28
+                , srcInfoPoints = []
+                }
+              "BlockArguments"
+          ]
+      ]
+      []
+      [ PatBind
+          SrcSpanInfo
+            { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 1 6 14
+            , srcInfoPoints = []
+            }
+          (PVar
+             SrcSpanInfo
+               { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 1 4 4
+               , srcInfoPoints = []
+               }
+             (Ident
+                SrcSpanInfo
+                  { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 1 4 4
+                  , srcInfoPoints = []
+                  }
+                "foo"))
+          (UnGuardedRhs
+             SrcSpanInfo
+               { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 5 6 14
+               , srcInfoPoints =
+                   [ SrcSpan "tests/examples/BlockArguments.hs" 4 5 4 6 ]
+               }
+             (App
+                SrcSpanInfo
+                  { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 7 6 14
+                  , srcInfoPoints = []
+                  }
+                (App
+                   SrcSpanInfo
+                     { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 7 4 19
+                     , srcInfoPoints = []
+                     }
+                   (Var
+                      SrcSpanInfo
+                        { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 7 4 11
+                        , srcInfoPoints = []
+                        }
+                      (UnQual
+                         SrcSpanInfo
+                           { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 7 4 11
+                           , srcInfoPoints = []
+                           }
+                         (Ident
+                            SrcSpanInfo
+                              { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 4 7 4 11
+                              , srcInfoPoints = []
+                              }
+                            "when")))
+                   (Paren
+                      SrcSpanInfo
+                        { srcInfoSpan =
+                            SrcSpan "tests/examples/BlockArguments.hs" 4 12 4 19
+                        , srcInfoPoints =
+                            [ SrcSpan "tests/examples/BlockArguments.hs" 4 12 4 13
+                            , SrcSpan "tests/examples/BlockArguments.hs" 4 18 4 19
+                            ]
+                        }
+                      (InfixApp
+                         SrcSpanInfo
+                           { srcInfoSpan =
+                               SrcSpan "tests/examples/BlockArguments.hs" 4 13 4 18
+                           , srcInfoPoints = []
+                           }
+                         (Var
+                            SrcSpanInfo
+                              { srcInfoSpan =
+                                  SrcSpan "tests/examples/BlockArguments.hs" 4 13 4 14
+                              , srcInfoPoints = []
+                              }
+                            (UnQual
+                               SrcSpanInfo
+                                 { srcInfoSpan =
+                                     SrcSpan "tests/examples/BlockArguments.hs" 4 13 4 14
+                                 , srcInfoPoints = []
+                                 }
+                               (Ident
+                                  SrcSpanInfo
+                                    { srcInfoSpan =
+                                        SrcSpan "tests/examples/BlockArguments.hs" 4 13 4 14
+                                    , srcInfoPoints = []
+                                    }
+                                  "x")))
+                         (QVarOp
+                            SrcSpanInfo
+                              { srcInfoSpan =
+                                  SrcSpan "tests/examples/BlockArguments.hs" 4 15 4 16
+                              , srcInfoPoints = []
+                              }
+                            (UnQual
+                               SrcSpanInfo
+                                 { srcInfoSpan =
+                                     SrcSpan "tests/examples/BlockArguments.hs" 4 15 4 16
+                                 , srcInfoPoints = []
+                                 }
+                               (Symbol
+                                  SrcSpanInfo
+                                    { srcInfoSpan =
+                                        SrcSpan "tests/examples/BlockArguments.hs" 4 15 4 16
+                                    , srcInfoPoints = []
+                                    }
+                                  ">")))
+                         (Lit
+                            SrcSpanInfo
+                              { srcInfoSpan =
+                                  SrcSpan "tests/examples/BlockArguments.hs" 4 17 4 18
+                              , srcInfoPoints = []
+                              }
+                            (Int
+                               SrcSpanInfo
+                                 { srcInfoSpan =
+                                     SrcSpan "tests/examples/BlockArguments.hs" 4 17 4 18
+                                 , srcInfoPoints = []
+                                 }
+                               0
+                               "0")))))
+                (Do
+                   SrcSpanInfo
+                     { srcInfoSpan =
+                         SrcSpan "tests/examples/BlockArguments.hs" 4 20 6 14
+                     , srcInfoPoints =
+                         [ SrcSpan "tests/examples/BlockArguments.hs" 4 20 4 22
+                         , SrcSpan "tests/examples/BlockArguments.hs" 5 3 5 3
+                         , SrcSpan "tests/examples/BlockArguments.hs" 6 3 6 3
+                         , SrcSpan "tests/examples/BlockArguments.hs" 8 1 8 0
+                         ]
+                     }
+                   [ Qualifier
+                       SrcSpanInfo
+                         { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 5 3 5 10
+                         , srcInfoPoints = []
+                         }
+                       (App
+                          SrcSpanInfo
+                            { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 5 3 5 10
+                            , srcInfoPoints = []
+                            }
+                          (Var
+                             SrcSpanInfo
+                               { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 5 3 5 8
+                               , srcInfoPoints = []
+                               }
+                             (UnQual
+                                SrcSpanInfo
+                                  { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 5 3 5 8
+                                  , srcInfoPoints = []
+                                  }
+                                (Ident
+                                   SrcSpanInfo
+                                     { srcInfoSpan =
+                                         SrcSpan "tests/examples/BlockArguments.hs" 5 3 5 8
+                                     , srcInfoPoints = []
+                                     }
+                                   "print")))
+                          (Var
+                             SrcSpanInfo
+                               { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 5 9 5 10
+                               , srcInfoPoints = []
+                               }
+                             (UnQual
+                                SrcSpanInfo
+                                  { srcInfoSpan =
+                                      SrcSpan "tests/examples/BlockArguments.hs" 5 9 5 10
+                                  , srcInfoPoints = []
+                                  }
+                                (Ident
+                                   SrcSpanInfo
+                                     { srcInfoSpan =
+                                         SrcSpan "tests/examples/BlockArguments.hs" 5 9 5 10
+                                     , srcInfoPoints = []
+                                     }
+                                   "x"))))
+                   , Qualifier
+                       SrcSpanInfo
+                         { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 6 3 6 14
+                         , srcInfoPoints = []
+                         }
+                       (Var
+                          SrcSpanInfo
+                            { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 6 3 6 14
+                            , srcInfoPoints = []
+                            }
+                          (UnQual
+                             SrcSpanInfo
+                               { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 6 3 6 14
+                               , srcInfoPoints = []
+                               }
+                             (Ident
+                                SrcSpanInfo
+                                  { srcInfoSpan =
+                                      SrcSpan "tests/examples/BlockArguments.hs" 6 3 6 14
+                                  , srcInfoPoints = []
+                                  }
+                                "exitFailure")))
+                   ])))
+          Nothing
+      , PatBind
+          SrcSpanInfo
+            { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 1 8 56
+            , srcInfoPoints = []
+            }
+          (PVar
+             SrcSpanInfo
+               { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 1 8 4
+               , srcInfoPoints = []
+               }
+             (Ident
+                SrcSpanInfo
+                  { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 1 8 4
+                  , srcInfoPoints = []
+                  }
+                "bar"))
+          (UnGuardedRhs
+             SrcSpanInfo
+               { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 5 8 56
+               , srcInfoPoints =
+                   [ SrcSpan "tests/examples/BlockArguments.hs" 8 5 8 6 ]
+               }
+             (App
+                SrcSpanInfo
+                  { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 7 8 56
+                  , srcInfoPoints = []
+                  }
+                (App
+                   SrcSpanInfo
+                     { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 7 8 26
+                     , srcInfoPoints = []
+                     }
+                   (Var
+                      SrcSpanInfo
+                        { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 7 8 21
+                        , srcInfoPoints = []
+                        }
+                      (UnQual
+                         SrcSpanInfo
+                           { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 7 8 21
+                           , srcInfoPoints = []
+                           }
+                         (Ident
+                            SrcSpanInfo
+                              { srcInfoSpan = SrcSpan "tests/examples/BlockArguments.hs" 8 7 8 21
+                              , srcInfoPoints = []
+                              }
+                            "withForeignPtr")))
+                   (Var
+                      SrcSpanInfo
+                        { srcInfoSpan =
+                            SrcSpan "tests/examples/BlockArguments.hs" 8 22 8 26
+                        , srcInfoPoints = []
+                        }
+                      (UnQual
+                         SrcSpanInfo
+                           { srcInfoSpan =
+                               SrcSpan "tests/examples/BlockArguments.hs" 8 22 8 26
+                           , srcInfoPoints = []
+                           }
+                         (Ident
+                            SrcSpanInfo
+                              { srcInfoSpan =
+                                  SrcSpan "tests/examples/BlockArguments.hs" 8 22 8 26
+                              , srcInfoPoints = []
+                              }
+                            "fptr"))))
+                (Lambda
+                   SrcSpanInfo
+                     { srcInfoSpan =
+                         SrcSpan "tests/examples/BlockArguments.hs" 8 27 8 56
+                     , srcInfoPoints =
+                         [ SrcSpan "tests/examples/BlockArguments.hs" 8 27 8 28
+                         , SrcSpan "tests/examples/BlockArguments.hs" 8 32 8 34
+                         ]
+                     }
+                   [ PVar
+                       SrcSpanInfo
+                         { srcInfoSpan =
+                             SrcSpan "tests/examples/BlockArguments.hs" 8 28 8 31
+                         , srcInfoPoints = []
+                         }
+                       (Ident
+                          SrcSpanInfo
+                            { srcInfoSpan =
+                                SrcSpan "tests/examples/BlockArguments.hs" 8 28 8 31
+                            , srcInfoPoints = []
+                            }
+                          "ptr")
+                   ]
+                   (App
+                      SrcSpanInfo
+                        { srcInfoSpan =
+                            SrcSpan "tests/examples/BlockArguments.hs" 8 35 8 56
+                        , srcInfoPoints = []
+                        }
+                      (App
+                         SrcSpanInfo
+                           { srcInfoSpan =
+                               SrcSpan "tests/examples/BlockArguments.hs" 8 35 8 51
+                           , srcInfoPoints = []
+                           }
+                         (App
+                            SrcSpanInfo
+                              { srcInfoSpan =
+                                  SrcSpan "tests/examples/BlockArguments.hs" 8 35 8 47
+                              , srcInfoPoints = []
+                              }
+                            (Var
+                               SrcSpanInfo
+                                 { srcInfoSpan =
+                                     SrcSpan "tests/examples/BlockArguments.hs" 8 35 8 43
+                                 , srcInfoPoints = []
+                                 }
+                               (UnQual
+                                  SrcSpanInfo
+                                    { srcInfoSpan =
+                                        SrcSpan "tests/examples/BlockArguments.hs" 8 35 8 43
+                                    , srcInfoPoints = []
+                                    }
+                                  (Ident
+                                     SrcSpanInfo
+                                       { srcInfoSpan =
+                                           SrcSpan "tests/examples/BlockArguments.hs" 8 35 8 43
+                                       , srcInfoPoints = []
+                                       }
+                                     "c_memcpy")))
+                            (Var
+                               SrcSpanInfo
+                                 { srcInfoSpan =
+                                     SrcSpan "tests/examples/BlockArguments.hs" 8 44 8 47
+                                 , srcInfoPoints = []
+                                 }
+                               (UnQual
+                                  SrcSpanInfo
+                                    { srcInfoSpan =
+                                        SrcSpan "tests/examples/BlockArguments.hs" 8 44 8 47
+                                    , srcInfoPoints = []
+                                    }
+                                  (Ident
+                                     SrcSpanInfo
+                                       { srcInfoSpan =
+                                           SrcSpan "tests/examples/BlockArguments.hs" 8 44 8 47
+                                       , srcInfoPoints = []
+                                       }
+                                     "buf"))))
+                         (Var
+                            SrcSpanInfo
+                              { srcInfoSpan =
+                                  SrcSpan "tests/examples/BlockArguments.hs" 8 48 8 51
+                              , srcInfoPoints = []
+                              }
+                            (UnQual
+                               SrcSpanInfo
+                                 { srcInfoSpan =
+                                     SrcSpan "tests/examples/BlockArguments.hs" 8 48 8 51
+                                 , srcInfoPoints = []
+                                 }
+                               (Ident
+                                  SrcSpanInfo
+                                    { srcInfoSpan =
+                                        SrcSpan "tests/examples/BlockArguments.hs" 8 48 8 51
+                                    , srcInfoPoints = []
+                                    }
+                                  "ptr"))))
+                      (Var
+                         SrcSpanInfo
+                           { srcInfoSpan =
+                               SrcSpan "tests/examples/BlockArguments.hs" 8 52 8 56
+                           , srcInfoPoints = []
+                           }
+                         (UnQual
+                            SrcSpanInfo
+                              { srcInfoSpan =
+                                  SrcSpan "tests/examples/BlockArguments.hs" 8 52 8 56
+                              , srcInfoPoints = []
+                              }
+                            (Ident
+                               SrcSpanInfo
+                                 { srcInfoSpan =
+                                     SrcSpan "tests/examples/BlockArguments.hs" 8 52 8 56
+                                 , srcInfoPoints = []
+                                 }
+                               "size")))))))
+          Nothing
+      , FunBind
+          SrcSpanInfo
+            { srcInfoSpan =
+                SrcSpan "tests/examples/BlockArguments.hs" 10 1 16 32
+            , srcInfoPoints = []
+            }
+          [ Match
+              SrcSpanInfo
+                { srcInfoSpan =
+                    SrcSpan "tests/examples/BlockArguments.hs" 10 1 16 32
+                , srcInfoPoints = []
+                }
+              (Ident
+                 SrcSpanInfo
+                   { srcInfoSpan =
+                       SrcSpan "tests/examples/BlockArguments.hs" 10 1 10 4
+                   , srcInfoPoints = []
+                   }
+                 "baz")
+              [ PVar
+                  SrcSpanInfo
+                    { srcInfoSpan =
+                        SrcSpan "tests/examples/BlockArguments.hs" 10 5 10 9
+                    , srcInfoPoints = []
+                    }
+                  (Ident
+                     SrcSpanInfo
+                       { srcInfoSpan =
+                           SrcSpan "tests/examples/BlockArguments.hs" 10 5 10 9
+                       , srcInfoPoints = []
+                       }
+                     "arg1")
+              , PVar
+                  SrcSpanInfo
+                    { srcInfoSpan =
+                        SrcSpan "tests/examples/BlockArguments.hs" 10 10 10 14
+                    , srcInfoPoints = []
+                    }
+                  (Ident
+                     SrcSpanInfo
+                       { srcInfoSpan =
+                           SrcSpan "tests/examples/BlockArguments.hs" 10 10 10 14
+                       , srcInfoPoints = []
+                       }
+                     "arg2")
+              , PVar
+                  SrcSpanInfo
+                    { srcInfoSpan =
+                        SrcSpan "tests/examples/BlockArguments.hs" 10 15 10 19
+                    , srcInfoPoints = []
+                    }
+                  (Ident
+                     SrcSpanInfo
+                       { srcInfoSpan =
+                           SrcSpan "tests/examples/BlockArguments.hs" 10 15 10 19
+                       , srcInfoPoints = []
+                       }
+                     "arg3")
+              , PVar
+                  SrcSpanInfo
+                    { srcInfoSpan =
+                        SrcSpan "tests/examples/BlockArguments.hs" 10 20 10 24
+                    , srcInfoPoints = []
+                    }
+                  (Ident
+                     SrcSpanInfo
+                       { srcInfoSpan =
+                           SrcSpan "tests/examples/BlockArguments.hs" 10 20 10 24
+                       , srcInfoPoints = []
+                       }
+                     "arg4")
+              ]
+              (UnGuardedRhs
+                 SrcSpanInfo
+                   { srcInfoSpan =
+                       SrcSpan "tests/examples/BlockArguments.hs" 10 25 16 32
+                   , srcInfoPoints =
+                       [ SrcSpan "tests/examples/BlockArguments.hs" 10 25 10 26 ]
+                   }
+                 (InfixApp
+                    SrcSpanInfo
+                      { srcInfoSpan =
+                          SrcSpan "tests/examples/BlockArguments.hs" 10 27 16 32
+                      , srcInfoPoints = []
+                      }
+                    (InfixApp
+                       SrcSpanInfo
+                         { srcInfoSpan =
+                             SrcSpan "tests/examples/BlockArguments.hs" 10 27 11 29
+                         , srcInfoPoints = []
+                         }
+                       (Var
+                          SrcSpanInfo
+                            { srcInfoSpan =
+                                SrcSpan "tests/examples/BlockArguments.hs" 10 27 10 39
+                            , srcInfoPoints = []
+                            }
+                          (UnQual
+                             SrcSpanInfo
+                               { srcInfoSpan =
+                                   SrcSpan "tests/examples/BlockArguments.hs" 10 27 10 39
+                               , srcInfoPoints = []
+                               }
+                             (Ident
+                                SrcSpanInfo
+                                  { srcInfoSpan =
+                                      SrcSpan "tests/examples/BlockArguments.hs" 10 27 10 39
+                                  , srcInfoPoints = []
+                                  }
+                                "initialValue")))
+                       (QVarOp
+                          SrcSpanInfo
+                            { srcInfoSpan =
+                                SrcSpan "tests/examples/BlockArguments.hs" 11 3 11 4
+                            , srcInfoPoints = []
+                            }
+                          (UnQual
+                             SrcSpanInfo
+                               { srcInfoSpan =
+                                   SrcSpan "tests/examples/BlockArguments.hs" 11 3 11 4
+                               , srcInfoPoints = []
+                               }
+                             (Symbol
+                                SrcSpanInfo
+                                  { srcInfoSpan =
+                                      SrcSpan "tests/examples/BlockArguments.hs" 11 3 11 4
+                                  , srcInfoPoints = []
+                                  }
+                                "&")))
+                       (App
+                          SrcSpanInfo
+                            { srcInfoSpan =
+                                SrcSpan "tests/examples/BlockArguments.hs" 11 7 11 29
+                            , srcInfoPoints = []
+                            }
+                          (App
+                             SrcSpanInfo
+                               { srcInfoSpan =
+                                   SrcSpan "tests/examples/BlockArguments.hs" 11 7 11 24
+                               , srcInfoPoints = []
+                               }
+                             (Var
+                                SrcSpanInfo
+                                  { srcInfoSpan =
+                                      SrcSpan "tests/examples/BlockArguments.hs" 11 7 11 19
+                                  , srcInfoPoints = []
+                                  }
+                                (UnQual
+                                   SrcSpanInfo
+                                     { srcInfoSpan =
+                                         SrcSpan "tests/examples/BlockArguments.hs" 11 7 11 19
+                                     , srcInfoPoints = []
+                                     }
+                                   (Ident
+                                      SrcSpanInfo
+                                        { srcInfoSpan =
+                                            SrcSpan "tests/examples/BlockArguments.hs" 11 7 11 19
+                                        , srcInfoPoints = []
+                                        }
+                                      "someFunction")))
+                             (Var
+                                SrcSpanInfo
+                                  { srcInfoSpan =
+                                      SrcSpan "tests/examples/BlockArguments.hs" 11 20 11 24
+                                  , srcInfoPoints = []
+                                  }
+                                (UnQual
+                                   SrcSpanInfo
+                                     { srcInfoSpan =
+                                         SrcSpan "tests/examples/BlockArguments.hs" 11 20 11 24
+                                     , srcInfoPoints = []
+                                     }
+                                   (Ident
+                                      SrcSpanInfo
+                                        { srcInfoSpan =
+                                            SrcSpan "tests/examples/BlockArguments.hs" 11 20 11 24
+                                        , srcInfoPoints = []
+                                        }
+                                      "arg1"))))
+                          (Var
+                             SrcSpanInfo
+                               { srcInfoSpan =
+                                   SrcSpan "tests/examples/BlockArguments.hs" 11 25 11 29
+                               , srcInfoPoints = []
+                               }
+                             (UnQual
+                                SrcSpanInfo
+                                  { srcInfoSpan =
+                                      SrcSpan "tests/examples/BlockArguments.hs" 11 25 11 29
+                                  , srcInfoPoints = []
+                                  }
+                                (Ident
+                                   SrcSpanInfo
+                                     { srcInfoSpan =
+                                         SrcSpan "tests/examples/BlockArguments.hs" 11 25 11 29
+                                     , srcInfoPoints = []
+                                     }
+                                   "arg2")))))
+                    (QVarOp
+                       SrcSpanInfo
+                         { srcInfoSpan =
+                             SrcSpan "tests/examples/BlockArguments.hs" 12 3 12 6
+                         , srcInfoPoints = []
+                         }
+                       (UnQual
+                          SrcSpanInfo
+                            { srcInfoSpan =
+                                SrcSpan "tests/examples/BlockArguments.hs" 12 3 12 6
+                            , srcInfoPoints = []
+                            }
+                          (Symbol
+                             SrcSpanInfo
+                               { srcInfoSpan =
+                                   SrcSpan "tests/examples/BlockArguments.hs" 12 3 12 6
+                               , srcInfoPoints = []
+                               }
+                             ">>=")))
+                    (App
+                       SrcSpanInfo
+                         { srcInfoSpan =
+                             SrcSpan "tests/examples/BlockArguments.hs" 12 7 16 32
+                         , srcInfoPoints = []
+                         }
+                       (Var
+                          SrcSpanInfo
+                            { srcInfoSpan =
+                                SrcSpan "tests/examples/BlockArguments.hs" 12 7 12 15
+                            , srcInfoPoints = []
+                            }
+                          (UnQual
+                             SrcSpanInfo
+                               { srcInfoSpan =
+                                   SrcSpan "tests/examples/BlockArguments.hs" 12 7 12 15
+                               , srcInfoPoints = []
+                               }
+                             (Ident
+                                SrcSpanInfo
+                                  { srcInfoSpan =
+                                      SrcSpan "tests/examples/BlockArguments.hs" 12 7 12 15
+                                  , srcInfoPoints = []
+                                  }
+                                "traverse")))
+                       (Lambda
+                          SrcSpanInfo
+                            { srcInfoSpan =
+                                SrcSpan "tests/examples/BlockArguments.hs" 12 16 16 32
+                            , srcInfoPoints =
+                                [ SrcSpan "tests/examples/BlockArguments.hs" 12 16 12 17
+                                , SrcSpan "tests/examples/BlockArguments.hs" 12 24 12 26
+                                ]
+                            }
+                          [ PTuple
+                              SrcSpanInfo
+                                { srcInfoSpan =
+                                    SrcSpan "tests/examples/BlockArguments.hs" 12 17 12 23
+                                , srcInfoPoints =
+                                    [ SrcSpan "tests/examples/BlockArguments.hs" 12 17 12 18
+                                    , SrcSpan "tests/examples/BlockArguments.hs" 12 19 12 20
+                                    , SrcSpan "tests/examples/BlockArguments.hs" 12 22 12 23
+                                    ]
+                                }
+                              Boxed
+                              [ PVar
+                                  SrcSpanInfo
+                                    { srcInfoSpan =
+                                        SrcSpan "tests/examples/BlockArguments.hs" 12 18 12 19
+                                    , srcInfoPoints = []
+                                    }
+                                  (Ident
+                                     SrcSpanInfo
+                                       { srcInfoSpan =
+                                           SrcSpan "tests/examples/BlockArguments.hs" 12 18 12 19
+                                       , srcInfoPoints = []
+                                       }
+                                     "x")
+                              , PVar
+                                  SrcSpanInfo
+                                    { srcInfoSpan =
+                                        SrcSpan "tests/examples/BlockArguments.hs" 12 21 12 22
+                                    , srcInfoPoints = []
+                                    }
+                                  (Ident
+                                     SrcSpanInfo
+                                       { srcInfoSpan =
+                                           SrcSpan "tests/examples/BlockArguments.hs" 12 21 12 22
+                                       , srcInfoPoints = []
+                                       }
+                                     "y")
+                              ]
+                          ]
+                          (InfixApp
+                             SrcSpanInfo
+                               { srcInfoSpan =
+                                   SrcSpan "tests/examples/BlockArguments.hs" 12 27 16 32
+                               , srcInfoPoints = []
+                               }
+                             (Do
+                                SrcSpanInfo
+                                  { srcInfoSpan =
+                                      SrcSpan "tests/examples/BlockArguments.hs" 12 27 15 14
+                                  , srcInfoPoints =
+                                      [ SrcSpan "tests/examples/BlockArguments.hs" 12 27 12 29
+                                      , SrcSpan "tests/examples/BlockArguments.hs" 13 9 13 9
+                                      , SrcSpan "tests/examples/BlockArguments.hs" 14 9 14 9
+                                      , SrcSpan "tests/examples/BlockArguments.hs" 15 9 15 9
+                                      , SrcSpan "tests/examples/BlockArguments.hs" 16 3 16 0
+                                      ]
+                                  }
+                                [ Generator
+                                    SrcSpanInfo
+                                      { srcInfoSpan =
+                                          SrcSpan "tests/examples/BlockArguments.hs" 13 9 13 17
+                                      , srcInfoPoints =
+                                          [ SrcSpan "tests/examples/BlockArguments.hs" 13 11 13 13 ]
+                                      }
+                                    (PVar
+                                       SrcSpanInfo
+                                         { srcInfoSpan =
+                                             SrcSpan "tests/examples/BlockArguments.hs" 13 9 13 10
+                                         , srcInfoPoints = []
+                                         }
+                                       (Ident
+                                          SrcSpanInfo
+                                            { srcInfoSpan =
+                                                SrcSpan
+                                                  "tests/examples/BlockArguments.hs" 13 9 13 10
+                                            , srcInfoPoints = []
+                                            }
+                                          "a"))
+                                    (App
+                                       SrcSpanInfo
+                                         { srcInfoSpan =
+                                             SrcSpan "tests/examples/BlockArguments.hs" 13 14 13 17
+                                         , srcInfoPoints = []
+                                         }
+                                       (Var
+                                          SrcSpanInfo
+                                            { srcInfoSpan =
+                                                SrcSpan
+                                                  "tests/examples/BlockArguments.hs" 13 14 13 15
+                                            , srcInfoPoints = []
+                                            }
+                                          (UnQual
+                                             SrcSpanInfo
+                                               { srcInfoSpan =
+                                                   SrcSpan
+                                                     "tests/examples/BlockArguments.hs" 13 14 13 15
+                                               , srcInfoPoints = []
+                                               }
+                                             (Ident
+                                                SrcSpanInfo
+                                                  { srcInfoSpan =
+                                                      SrcSpan
+                                                        "tests/examples/BlockArguments.hs"
+                                                        13
+                                                        14
+                                                        13
+                                                        15
+                                                  , srcInfoPoints = []
+                                                  }
+                                                "f")))
+                                       (Var
+                                          SrcSpanInfo
+                                            { srcInfoSpan =
+                                                SrcSpan
+                                                  "tests/examples/BlockArguments.hs" 13 16 13 17
+                                            , srcInfoPoints = []
+                                            }
+                                          (UnQual
+                                             SrcSpanInfo
+                                               { srcInfoSpan =
+                                                   SrcSpan
+                                                     "tests/examples/BlockArguments.hs" 13 16 13 17
+                                               , srcInfoPoints = []
+                                               }
+                                             (Ident
+                                                SrcSpanInfo
+                                                  { srcInfoSpan =
+                                                      SrcSpan
+                                                        "tests/examples/BlockArguments.hs"
+                                                        13
+                                                        16
+                                                        13
+                                                        17
+                                                  , srcInfoPoints = []
+                                                  }
+                                                "x"))))
+                                , Generator
+                                    SrcSpanInfo
+                                      { srcInfoSpan =
+                                          SrcSpan "tests/examples/BlockArguments.hs" 14 9 14 17
+                                      , srcInfoPoints =
+                                          [ SrcSpan "tests/examples/BlockArguments.hs" 14 11 14 13 ]
+                                      }
+                                    (PVar
+                                       SrcSpanInfo
+                                         { srcInfoSpan =
+                                             SrcSpan "tests/examples/BlockArguments.hs" 14 9 14 10
+                                         , srcInfoPoints = []
+                                         }
+                                       (Ident
+                                          SrcSpanInfo
+                                            { srcInfoSpan =
+                                                SrcSpan
+                                                  "tests/examples/BlockArguments.hs" 14 9 14 10
+                                            , srcInfoPoints = []
+                                            }
+                                          "b"))
+                                    (App
+                                       SrcSpanInfo
+                                         { srcInfoSpan =
+                                             SrcSpan "tests/examples/BlockArguments.hs" 14 14 14 17
+                                         , srcInfoPoints = []
+                                         }
+                                       (Var
+                                          SrcSpanInfo
+                                            { srcInfoSpan =
+                                                SrcSpan
+                                                  "tests/examples/BlockArguments.hs" 14 14 14 15
+                                            , srcInfoPoints = []
+                                            }
+                                          (UnQual
+                                             SrcSpanInfo
+                                               { srcInfoSpan =
+                                                   SrcSpan
+                                                     "tests/examples/BlockArguments.hs" 14 14 14 15
+                                               , srcInfoPoints = []
+                                               }
+                                             (Ident
+                                                SrcSpanInfo
+                                                  { srcInfoSpan =
+                                                      SrcSpan
+                                                        "tests/examples/BlockArguments.hs"
+                                                        14
+                                                        14
+                                                        14
+                                                        15
+                                                  , srcInfoPoints = []
+                                                  }
+                                                "g")))
+                                       (Var
+                                          SrcSpanInfo
+                                            { srcInfoSpan =
+                                                SrcSpan
+                                                  "tests/examples/BlockArguments.hs" 14 16 14 17
+                                            , srcInfoPoints = []
+                                            }
+                                          (UnQual
+                                             SrcSpanInfo
+                                               { srcInfoSpan =
+                                                   SrcSpan
+                                                     "tests/examples/BlockArguments.hs" 14 16 14 17
+                                               , srcInfoPoints = []
+                                               }
+                                             (Ident
+                                                SrcSpanInfo
+                                                  { srcInfoSpan =
+                                                      SrcSpan
+                                                        "tests/examples/BlockArguments.hs"
+                                                        14
+                                                        16
+                                                        14
+                                                        17
+                                                  , srcInfoPoints = []
+                                                  }
+                                                "y"))))
+                                , Qualifier
+                                    SrcSpanInfo
+                                      { srcInfoSpan =
+                                          SrcSpan "tests/examples/BlockArguments.hs" 15 9 15 14
+                                      , srcInfoPoints = []
+                                      }
+                                    (App
+                                       SrcSpanInfo
+                                         { srcInfoSpan =
+                                             SrcSpan "tests/examples/BlockArguments.hs" 15 9 15 14
+                                         , srcInfoPoints = []
+                                         }
+                                       (App
+                                          SrcSpanInfo
+                                            { srcInfoSpan =
+                                                SrcSpan
+                                                  "tests/examples/BlockArguments.hs" 15 9 15 12
+                                            , srcInfoPoints = []
+                                            }
+                                          (Var
+                                             SrcSpanInfo
+                                               { srcInfoSpan =
+                                                   SrcSpan
+                                                     "tests/examples/BlockArguments.hs" 15 9 15 10
+                                               , srcInfoPoints = []
+                                               }
+                                             (UnQual
+                                                SrcSpanInfo
+                                                  { srcInfoSpan =
+                                                      SrcSpan
+                                                        "tests/examples/BlockArguments.hs"
+                                                        15
+                                                        9
+                                                        15
+                                                        10
+                                                  , srcInfoPoints = []
+                                                  }
+                                                (Ident
+                                                   SrcSpanInfo
+                                                     { srcInfoSpan =
+                                                         SrcSpan
+                                                           "tests/examples/BlockArguments.hs"
+                                                           15
+                                                           9
+                                                           15
+                                                           10
+                                                     , srcInfoPoints = []
+                                                     }
+                                                   "h")))
+                                          (Var
+                                             SrcSpanInfo
+                                               { srcInfoSpan =
+                                                   SrcSpan
+                                                     "tests/examples/BlockArguments.hs" 15 11 15 12
+                                               , srcInfoPoints = []
+                                               }
+                                             (UnQual
+                                                SrcSpanInfo
+                                                  { srcInfoSpan =
+                                                      SrcSpan
+                                                        "tests/examples/BlockArguments.hs"
+                                                        15
+                                                        11
+                                                        15
+                                                        12
+                                                  , srcInfoPoints = []
+                                                  }
+                                                (Ident
+                                                   SrcSpanInfo
+                                                     { srcInfoSpan =
+                                                         SrcSpan
+                                                           "tests/examples/BlockArguments.hs"
+                                                           15
+                                                           11
+                                                           15
+                                                           12
+                                                     , srcInfoPoints = []
+                                                     }
+                                                   "a"))))
+                                       (Var
+                                          SrcSpanInfo
+                                            { srcInfoSpan =
+                                                SrcSpan
+                                                  "tests/examples/BlockArguments.hs" 15 13 15 14
+                                            , srcInfoPoints = []
+                                            }
+                                          (UnQual
+                                             SrcSpanInfo
+                                               { srcInfoSpan =
+                                                   SrcSpan
+                                                     "tests/examples/BlockArguments.hs" 15 13 15 14
+                                               , srcInfoPoints = []
+                                               }
+                                             (Ident
+                                                SrcSpanInfo
+                                                  { srcInfoSpan =
+                                                      SrcSpan
+                                                        "tests/examples/BlockArguments.hs"
+                                                        15
+                                                        13
+                                                        15
+                                                        14
+                                                  , srcInfoPoints = []
+                                                  }
+                                                "b"))))
+                                ])
+                             (QVarOp
+                                SrcSpanInfo
+                                  { srcInfoSpan =
+                                      SrcSpan "tests/examples/BlockArguments.hs" 16 3 16 6
+                                  , srcInfoPoints = []
+                                  }
+                                (UnQual
+                                   SrcSpanInfo
+                                     { srcInfoSpan =
+                                         SrcSpan "tests/examples/BlockArguments.hs" 16 3 16 6
+                                     , srcInfoPoints = []
+                                     }
+                                   (Symbol
+                                      SrcSpanInfo
+                                        { srcInfoSpan =
+                                            SrcSpan "tests/examples/BlockArguments.hs" 16 3 16 6
+                                        , srcInfoPoints = []
+                                        }
+                                      ">>=")))
+                             (App
+                                SrcSpanInfo
+                                  { srcInfoSpan =
+                                      SrcSpan "tests/examples/BlockArguments.hs" 16 7 16 32
+                                  , srcInfoPoints = []
+                                  }
+                                (App
+                                   SrcSpanInfo
+                                     { srcInfoSpan =
+                                         SrcSpan "tests/examples/BlockArguments.hs" 16 7 16 27
+                                     , srcInfoPoints = []
+                                     }
+                                   (Var
+                                      SrcSpanInfo
+                                        { srcInfoSpan =
+                                            SrcSpan "tests/examples/BlockArguments.hs" 16 7 16 22
+                                        , srcInfoPoints = []
+                                        }
+                                      (UnQual
+                                         SrcSpanInfo
+                                           { srcInfoSpan =
+                                               SrcSpan "tests/examples/BlockArguments.hs" 16 7 16 22
+                                           , srcInfoPoints = []
+                                           }
+                                         (Ident
+                                            SrcSpanInfo
+                                              { srcInfoSpan =
+                                                  SrcSpan
+                                                    "tests/examples/BlockArguments.hs" 16 7 16 22
+                                              , srcInfoPoints = []
+                                              }
+                                            "anotherFunction")))
+                                   (Var
+                                      SrcSpanInfo
+                                        { srcInfoSpan =
+                                            SrcSpan "tests/examples/BlockArguments.hs" 16 23 16 27
+                                        , srcInfoPoints = []
+                                        }
+                                      (UnQual
+                                         SrcSpanInfo
+                                           { srcInfoSpan =
+                                               SrcSpan
+                                                 "tests/examples/BlockArguments.hs" 16 23 16 27
+                                           , srcInfoPoints = []
+                                           }
+                                         (Ident
+                                            SrcSpanInfo
+                                              { srcInfoSpan =
+                                                  SrcSpan
+                                                    "tests/examples/BlockArguments.hs" 16 23 16 27
+                                              , srcInfoPoints = []
+                                              }
+                                            "arg3"))))
+                                (Var
+                                   SrcSpanInfo
+                                     { srcInfoSpan =
+                                         SrcSpan "tests/examples/BlockArguments.hs" 16 28 16 32
+                                     , srcInfoPoints = []
+                                     }
+                                   (UnQual
+                                      SrcSpanInfo
+                                        { srcInfoSpan =
+                                            SrcSpan "tests/examples/BlockArguments.hs" 16 28 16 32
+                                        , srcInfoPoints = []
+                                        }
+                                      (Ident
+                                         SrcSpanInfo
+                                           { srcInfoSpan =
+                                               SrcSpan
+                                                 "tests/examples/BlockArguments.hs" 16 28 16 32
+                                           , srcInfoPoints = []
+                                           }
+                                         "arg4")))))))))
+              Nothing
+          ]
+      ]
+  , []
+  )
diff --git a/tests/examples/BlockArguments.hs.prettyparser.golden b/tests/examples/BlockArguments.hs.prettyparser.golden
new file mode 100644
--- /dev/null
+++ b/tests/examples/BlockArguments.hs.prettyparser.golden
@@ -0,0 +1,10 @@
+Roundtrip test failed
+
+AST 1:
+
+Module () (Just (ModuleHead () (ModuleName () "BlockArguments") Nothing Nothing)) [LanguagePragma () [Ident () "BlockArguments"]] [] [PatBind () (PVar () (Ident () "foo")) (UnGuardedRhs () (App () (App () (Var () (UnQual () (Ident () "when"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "x"))) (QVarOp () (UnQual () (Symbol () ">"))) (Lit () (Int () 0 "0"))))) (Do () [Qualifier () (App () (Var () (UnQual () (Ident () "print"))) (Var () (UnQual () (Ident () "x")))),Qualifier () (Var () (UnQual () (Ident () "exitFailure")))]))) Nothing,PatBind () (PVar () (Ident () "bar")) (UnGuardedRhs () (App () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "fptr")))) (Lambda () [PVar () (Ident () "ptr")] (App () (App () (App () (Var () (UnQual () (Ident () "c_memcpy"))) (Var () (UnQual () (Ident () "buf")))) (Var () (UnQual () (Ident () "ptr")))) (Var () (UnQual () (Ident () "size"))))))) Nothing,FunBind () [Match () (Ident () "baz") [PVar () (Ident () "arg1"),PVar () (Ident () "arg2"),PVar () (Ident () "arg3"),PVar () (Ident () "arg4")] (UnGuardedRhs () (InfixApp () (InfixApp () (Var () (UnQual () (Ident () "initialValue"))) (QVarOp () (UnQual () (Symbol () "&"))) (App () (App () (Var () (UnQual () (Ident () "someFunction"))) (Var () (UnQual () (Ident () "arg1")))) (Var () (UnQual () (Ident () "arg2"))))) (QVarOp () (UnQual () (Symbol () ">>="))) (App () (Var () (UnQual () (Ident () "traverse"))) (Lambda () [PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "y")]] (InfixApp () (Do () [Generator () (PVar () (Ident () "a")) (App () (Var () (UnQual () (Ident () "f"))) (Var () (UnQual () (Ident () "x")))),Generator () (PVar () (Ident () "b")) (App () (Var () (UnQual () (Ident () "g"))) (Var () (UnQual () (Ident () "y")))),Qualifier () (App () (App () (Var () (UnQual () (Ident () "h"))) (Var () (UnQual () (Ident () "a")))) (Var () (UnQual () (Ident () "b"))))]) (QVarOp () (UnQual () (Symbol () ">>="))) (App () (App () (Var () (UnQual () (Ident () "anotherFunction"))) (Var () (UnQual () (Ident () "arg3")))) (Var () (UnQual () (Ident () "arg4"))))))))) Nothing]]
+
+AST 2:
+
+Module () (Just (ModuleHead () (ModuleName () "BlockArguments") Nothing Nothing)) [LanguagePragma () [Ident () "BlockArguments"]] [] [PatBind () (PVar () (Ident () "foo")) (UnGuardedRhs () (App () (App () (Var () (UnQual () (Ident () "when"))) (Paren () (InfixApp () (Var () (UnQual () (Ident () "x"))) (QVarOp () (UnQual () (Symbol () ">"))) (Lit () (Int () 0 "0"))))) (Paren () (Do () [Qualifier () (App () (Var () (UnQual () (Ident () "print"))) (Var () (UnQual () (Ident () "x")))),Qualifier () (Var () (UnQual () (Ident () "exitFailure")))])))) Nothing,PatBind () (PVar () (Ident () "bar")) (UnGuardedRhs () (App () (App () (Var () (UnQual () (Ident () "withForeignPtr"))) (Var () (UnQual () (Ident () "fptr")))) (Paren () (Lambda () [PVar () (Ident () "ptr")] (App () (App () (App () (Var () (UnQual () (Ident () "c_memcpy"))) (Var () (UnQual () (Ident () "buf")))) (Var () (UnQual () (Ident () "ptr")))) (Var () (UnQual () (Ident () "size")))))))) Nothing,FunBind () [Match () (Ident () "baz") [PVar () (Ident () "arg1"),PVar () (Ident () "arg2"),PVar () (Ident () "arg3"),PVar () (Ident () "arg4")] (UnGuardedRhs () (InfixApp () (InfixApp () (Var () (UnQual () (Ident () "initialValue"))) (QVarOp () (UnQual () (Symbol () "&"))) (App () (App () (Var () (UnQual () (Ident () "someFunction"))) (Var () (UnQual () (Ident () "arg1")))) (Var () (UnQual () (Ident () "arg2"))))) (QVarOp () (UnQual () (Symbol () ">>="))) (App () (Var () (UnQual () (Ident () "traverse"))) (Paren () (Lambda () [PTuple () Boxed [PVar () (Ident () "x"),PVar () (Ident () "y")]] (InfixApp () (Do () [Generator () (PVar () (Ident () "a")) (App () (Var () (UnQual () (Ident () "f"))) (Var () (UnQual () (Ident () "x")))),Generator () (PVar () (Ident () "b")) (App () (Var () (UnQual () (Ident () "g"))) (Var () (UnQual () (Ident () "y")))),Qualifier () (App () (App () (Var () (UnQual () (Ident () "h"))) (Var () (UnQual () (Ident () "a")))) (Var () (UnQual () (Ident () "b"))))]) (QVarOp () (UnQual () (Symbol () ">>="))) (App () (App () (Var () (UnQual () (Ident () "anotherFunction"))) (Var () (UnQual () (Ident () "arg3")))) (Var () (UnQual () (Ident () "arg4")))))))))) Nothing]]
+
diff --git a/tests/examples/BlockArguments.hs.prettyprinter.golden b/tests/examples/BlockArguments.hs.prettyprinter.golden
new file mode 100644
--- /dev/null
+++ b/tests/examples/BlockArguments.hs.prettyprinter.golden
@@ -0,0 +1,15 @@
+{-# LANGUAGE BlockArguments #-}
+module BlockArguments where
+foo
+  = when (x > 0)
+      (do print x
+          exitFailure)
+bar = withForeignPtr fptr (\ ptr -> c_memcpy buf ptr size)
+baz arg1 arg2 arg3 arg4
+  = initialValue & someFunction arg1 arg2 >>=
+      traverse
+        (\ (x, y) ->
+           do a <- f x
+              b <- g y
+              h a b
+             >>= anotherFunction arg3 arg4)
