ifThenElse :: [String] -> AParser st TermExt
ifThenElse ks = do
  i <- ifKey
  f <- eqTerm ks
  t <- asKey thenS
  a <- eqTerm ks
  e <- asKey elseS
  b <- eqTerm ks
  return $ IfThenElse f a b $ toRange i [t] e
ifThenElse :: [String] -> AParser st TermExt
ifThenElse ks = do
  i <- ifKey
  f <- eqTerm ks
  t <- asKey thenS
  a <- eqTerm ks
  e <- asKey elseS
  b <- eqTerm ks
  return $ IfThenElse f a b $ toRange i [t] e
ifThenElse ks = do
  i <- ifKey
  f <- eqTerm ks
  t <- asKey thenS
  a <- eqTerm ks
  e <- asKey elseS
  b <- eqTerm ks
  return $ IfThenElse f a b $ toRange i [t] e