-- ==========================================================--
--
pgThen3 :: (a -> b -> c -> d) -> 
           Parser a -> 
           Parser b -> 
           Parser c -> 
           Parser d

pgThen3 combine p1 p2 p3 env toks
   = case p1 env toks of
     {
       PFail tok1 
         -> PFail tok1 ;
       POk env1 toks1 item1 
         -> case p2 env1 toks1 of
            {
              PFail tok2 
                -> PFail tok2 ;
              POk env2 toks2 item2
                -> case p3 env2 toks2 of
                   {
                     PFail tok3
                       -> PFail tok3 ;
                     POk env3 toks3 item3
                       -> POk env3 toks3 (combine item1 item2 item3)
                   }
            }
     }
pgThen3 :: (a -> b -> c -> d) -> 
           Parser a -> 
           Parser b -> 
           Parser c -> 
           Parser d
pgThen3 combine p1 p2 p3 env toks
   = case p1 env toks of
     {
       PFail tok1 
         -> PFail tok1 ;
       POk env1 toks1 item1 
         -> case p2 env1 toks1 of
            {
              PFail tok2 
                -> PFail tok2 ;
              POk env2 toks2 item2
                -> case p3 env2 toks2 of
                   {
                     PFail tok3
                       -> PFail tok3 ;
                     POk env3 toks3 item3
                       -> POk env3 toks3 (combine item1 item2 item3)
                   }
            }
     }
pgThen3 combine p1 p2 p3 env toks
   = case p1 env toks of
     {
       PFail tok1 
         -> PFail tok1 ;
       POk env1 toks1 item1 
         -> case p2 env1 toks1 of
            {
              PFail tok2 
                -> PFail tok2 ;
              POk env2 toks2 item2
                -> case p3 env2 toks2 of
                   {
                     PFail tok3
                       -> PFail tok3 ;
                     POk env3 toks3 item3
                       -> POk env3 toks3 (combine item1 item2 item3)
                   }
            }
     }