proc :: Parser Proc
proc = do { whitespace
          ; f      <- identifier
          ; params <- tuple  var
          ; bdy    <- braces $ do { b <- block
                                  ; bs <- many block
                                  ; return (b : bs)
                                  } -- procedure must have at least one block
          ; return $ Proc { name = f, args = params, body = bdy }
          }
    <?> "proc"
proc :: Parser Proc
proc = do { whitespace
          ; f      <- identifier
          ; params <- tuple  var
          ; bdy    <- braces $ do { b <- block
                                  ; bs <- many block
                                  ; return (b : bs)
                                  } -- procedure must have at least one block
          ; return $ Proc { name = f, args = params, body = bdy }
          }
    <?> "proc"
proc = do { whitespace
          ; f      <- identifier
          ; params <- tuple  var
          ; bdy    <- braces $ do { b <- block
                                  ; bs <- many block
                                  ; return (b : bs)
                                  } -- procedure must have at least one block
          ; return $ Proc { name = f, args = params, body = bdy }
          }
    <?> "proc"