@@ -11,7 +11,7 @@ module Idris.Core.Evaluate(normalise, normaliseTrace, normaliseC, normaliseAll,
11 lookupNames, lookupTyName, lookupTyNameExact, lookupTy, lookupTyExact,
11 lookupNames, lookupTyName, lookupTyNameExact, lookupTy, lookupTyExact,
12 lookupP, lookupDef, lookupNameDef, lookupDefExact, lookupDefAcc, lookupDefAccExact, lookupVal,
12 lookupP, lookupDef, lookupNameDef, lookupDefExact, lookupDefAcc, lookupDefAccExact, lookupVal,
13 mapDefCtxt,
13 mapDefCtxt,
14− lookupTotal, lookupNameTotal, lookupMetaInformation, lookupTyEnv, isTCDict, isDConName, isTConName, isConName, isFnName,
14+ lookupTotal, lookupNameTotal, lookupMetaInformation, lookupTyEnv, isTCDict, isDConName, canBeDConName, isTConName, isConName, isFnName,
15 Value(..), Quote(..), initEval, uniqueNameCtxt, uniqueBindersCtxt, definitions,
15 Value(..), Quote(..), initEval, uniqueNameCtxt, uniqueBindersCtxt, definitions,
16 isUniverse) where
16 isUniverse) where
@@ -975,12 +975,21 @@ isTConName n ctxt
975 Just (TyDecl (TCon _ _) _) -> True
975 Just (TyDecl (TCon _ _) _) -> True
976 _ -> False
976 _ -> False
978+-- | Check whether a resolved name is certainly a data constructor
978isDConName :: Name -> Context -> Bool
979isDConName :: Name -> Context -> Bool
979isDConName n ctxt
980isDConName n ctxt
980 = case lookupDefExact n ctxt of
981 = case lookupDefExact n ctxt of
981 Just (TyDecl (DCon _ _ _) _) -> True
982 Just (TyDecl (DCon _ _ _) _) -> True
982 _ -> False
983 _ -> False
985+-- | Check whether any overloading of a name is a data constructor
986+canBeDConName :: Name -> Context -> Bool
988+ = or $ do def <- lookupCtxt n (definitions ctxt)
990+ (TyDecl (DCon _ _ _) _) -> return True
984isFnName :: Name -> Context -> Bool
993isFnName :: Name -> Context -> Bool
985isFnName n ctxt
994isFnName n ctxt
986 = case lookupDefExact n ctxt of
995 = case lookupDefExact n ctxt of