absT :: ReadP Term
absT = do
  char lambda
  skipSC
  
  vs <- absVars
  
  skipSC
  char lambdaSep
  
  skipSC
  t <- term
  
  return $ foldr (\(s, v) t -> AbsT s v t) t vs
  
  where absVars = do
          sv <- absVar
          vs <- absVars'
          return (sv:vs)
        absVar = do
          s <- option False (char strictTag >> skipSC >> return True)
          v <- var
          return (s, v)
        absVars' = (spaces >> liftM2 (:) absVar absVars') <++ return []
absT :: ReadP Term
absT = do
  char lambda
  skipSC
  
  vs <- absVars
  
  skipSC
  char lambdaSep
  
  skipSC
  t <- term
  
  return $ foldr (\(s, v) t -> AbsT s v t) t vs
  
  where absVars = do
          sv <- absVar
          vs <- absVars'
          return (sv:vs)
        absVar = do
          s <- option False (char strictTag >> skipSC >> return True)
          v <- var
          return (s, v)
        absVars' = (spaces >> liftM2 (:) absVar absVars') <++ return []
absT = do
  char lambda
  skipSC
  
  vs <- absVars
  
  skipSC
  char lambdaSep
  
  skipSC
  t <- term
  
  return $ foldr (\(s, v) t -> AbsT s v t) t vs
  
  where absVars = do
          sv <- absVar
          vs <- absVars'
          return (sv:vs)
        absVar = do
          s <- option False (char strictTag >> skipSC >> return True)
          v <- var
          return (s, v)
        absVars' = (spaces >> liftM2 (:) absVar absVars') <++ return []