collectTyAndValBinders expr
  = (tvs, ids, body)
  where
    (tvs, body1) = collectTyBinders expr
    (ids, body)  = collectValBinders body1

-- | Takes a nested application expression and returns the the function
-- being applied and the arguments to which it is applied
collectTyAndValBinders expr
  = (tvs, ids, body)
  where
    (tvs, body1) = collectTyBinders expr
    (ids, body)  = collectValBinders body1

-- | Takes a nested application expression and returns the the function
-- being applied and the arguments to which it is applied
collectTyAndValBinders expr
  = (tvs, ids, body)
  where
    (tvs, body1) = collectTyBinders expr
    (ids, body)  = collectValBinders body1

-- | Takes a nested application expression and returns the the function
-- being applied and the arguments to which it is applied