CurryInfo: verify-non-fail-2.0.0 / Verify.WithSMT.allQNamesInExp

definition:
 
allQNamesInExp :: Expr -> [Either QName QName]
allQNamesInExp e =
  trExpr (const id) (const id) comb lt fr (.) cas branch const e []
 where
  comb ct qn exp = ((classifyName ct) qn:) . foldr (.) id exp
   where classifyName FuncCall         = Right
         classifyName (FuncPartCall _) = Right
         classifyName ConsCall         = Left
         classifyName (ConsPartCall _) = Left
  lt bs exp = exp . foldr (.) id (map snd bs)
  fr _ exp = exp
  cas _ exp bs = exp . foldr (.) id bs
  branch pat exp = ((args pat)++) . exp
  args (Pattern qc _) = [Left qc]
  args (LPattern _)   = []
demand:
 argument 1
deterministic:
 deterministic operation
documentation:
 
---------------------------------------------------------------------------
Get all qualified names occurring in an expression which are either
constructor or defined function names.
failfree:
 _
indeterministic:
 referentially transparent operation
infix:
 no fixity defined
iotype:
 {(_) |-> _}
name:
 allQNamesInExp
precedence:
 no precedence defined
result-values:
 _
signature:
 FlatCurry.Types.Expr -> [Prelude.Either (String, String) (String, String)]
solution-complete:
 operation might suspend on free variables
terminating:
 possibly non-terminating
totally-defined:
 reducible on all ground data terms