@@ -66,58 +66,67 @@ mutual
6666 processArgs : {auto c : Ref Ctxt Defs} ->
6767 {auto s : Ref Syn SyntaxInfo} ->
6868 {auto q : Ref QVar Int} ->
69+ Bool -> -- should be fully applied
6970 ClosedTerm -> ClosedNF ->
7071 (expargs : List RawImp) ->
7172 (autoargs : List RawImp) ->
7273 (namedargs : List (Name, RawImp)) ->
7374 Core ClosedTerm
7475 -- unnamed takes priority
75- processArgs fn (NBind fc x (Pi _ _ Explicit ty) sc) (e :: exps) autos named
76+ processArgs con fn (NBind fc x (Pi _ _ Explicit ty) sc) (e :: exps) autos named
7677 = do e' <- mkTerm e (Just ty) [] [] []
7778 defs <- get Ctxt
78- processArgs (App fc fn e') ! (sc defs (toClosure defaultOpts Env . empty e'))
79+ processArgs con (App fc fn e')
80+ ! (sc defs (toClosure defaultOpts Env . empty e'))
7981 exps autos named
80- processArgs fn (NBind fc x (Pi _ _ Explicit ty) sc) [] autos named
82+ processArgs con fn (NBind fc x (Pi _ _ Explicit ty) sc) [] autos named
8183 = do defs <- get Ctxt
8284 case findNamed x named of
8385 Just ((_ , e), named') =>
8486 do e' <- mkTerm e (Just ty) [] [] []
85- processArgs (App fc fn e') ! (sc defs (toClosure defaultOpts Env . empty e'))
87+ processArgs con (App fc fn e')
88+ ! (sc defs (toClosure defaultOpts Env . empty e'))
8689 [] autos named'
87- Nothing => badClause fn [] autos named
88- processArgs fn (NBind fc x (Pi _ _ Implicit ty) sc) exps autos named
90+ Nothing => -- Expected an explicit argument, but only implicits left
91+ if not con && null autos && null named
92+ then pure fn
93+ else badClause fn [] autos named
94+ processArgs con fn (NBind fc x (Pi _ _ Implicit ty) sc) exps autos named
8995 = do defs <- get Ctxt
9096 case findNamed x named of
9197 Nothing => do e' <- nextVar fc
92- processArgs (App fc fn e')
98+ processArgs con (App fc fn e')
9399 ! (sc defs (toClosure defaultOpts Env . empty e'))
94100 exps autos named
95101 Just ((_ , e), named') =>
96102 do e' <- mkTerm e (Just ty) [] [] []
97- processArgs (App fc fn e') ! (sc defs (toClosure defaultOpts Env . empty e'))
103+ processArgs con (App fc fn e')
104+ ! (sc defs (toClosure defaultOpts Env . empty e'))
98105 exps autos named'
99- processArgs fn (NBind fc x (Pi _ _ AutoImplicit ty) sc) exps autos named
106+ processArgs con fn (NBind fc x (Pi _ _ AutoImplicit ty) sc) exps autos named
100107 = do defs <- get Ctxt
101108 case autos of
102109 (e :: autos') => -- unnamed takes priority
103110 do e' <- mkTerm e (Just ty) [] [] []
104- processArgs (App fc fn e') ! (sc defs (toClosure defaultOpts Env . empty e'))
111+ processArgs con (App fc fn e')
112+ ! (sc defs (toClosure defaultOpts Env . empty e'))
105113 exps autos' named
106114 [] =>
107115 case findNamed x named of
108116 Nothing =>
109117 do e' <- nextVar fc
110- processArgs (App fc fn e')
118+ processArgs con (App fc fn e')
111119 ! (sc defs (toClosure defaultOpts Env . empty e'))
112120 exps [] named
113121 Just ((_ , e), named') =>
114122 do e' <- mkTerm e (Just ty) [] [] []
115- processArgs (App fc fn e') ! (sc defs (toClosure defaultOpts Env . empty e'))
123+ processArgs con (App fc fn e')
124+ ! (sc defs (toClosure defaultOpts Env . empty e'))
116125 exps [] named'
117- processArgs fn ty [] [] [] = pure fn
118- processArgs fn ty (x :: _ ) autos named
126+ processArgs _ fn _ [] [] [] = pure fn
127+ processArgs _ fn _ (x :: _ ) autos named
119128 = throw $ GenericMsg (getFC x) " Too many arguments"
120- processArgs fn ty exps autos named
129+ processArgs _ fn _ exps autos named
121130 = badClause fn exps autos named
122131
123132 buildApp : {auto c : Ref Ctxt Defs} ->
@@ -148,7 +157,10 @@ mutual
148157 -- When `head` is `Func`, the pattern will be marked as forced and
149158 -- the coverage checker will considers that all the cases have been
150159 -- covered!
151- processArgs (Ref fc (getDefNameType gdef) (Resolved i)) tynf exps autos named
160+ let nameType = getDefNameType gdef
161+ processArgs (isJust $ isCon nameType)
162+ (Ref fc nameType (Resolved i))
163+ tynf exps autos named
152164
153165 mkTerm : {auto c : Ref Ctxt Defs} ->
154166 {auto s : Ref Syn SyntaxInfo} ->
0 commit comments