@@ -3,6 +3,7 @@
3module Idris.CaseSplit(splitOnLine, replaceSplits,
3module Idris.CaseSplit(splitOnLine, replaceSplits,
4 getClause, getProofClause,
4 getClause, getProofClause,
6 getUniq, nameRoot) where
7 getUniq, nameRoot) where
8-- splitting a variable in a pattern clause
9-- splitting a variable in a pattern clause
@@ -117,7 +118,7 @@ mergeAllPats ist cv t (p : ps)
117 = let (p', MS _ _ _ u) = runState (mergePat ist t p Nothing)
118 = let (p', MS _ _ _ u) = runState (mergePat ist t p Nothing)
118 (MS [] [] (filter (/=cv) (patvars t)) [])
119 (MS [] [] (filter (/=cv) (patvars t)) [])
119 ps' = mergeAllPats ist cv t ps in
120 ps' = mergeAllPats ist cv t ps in
120− ((p, u) : ps')
121+ ((p', u) : ps')
121 where patvars (PRef _ n) = [n]
122 where patvars (PRef _ n) = [n]
122 patvars (PApp _ _ as) = concatMap (patvars . getTm) as
123 patvars (PApp _ _ as) = concatMap (patvars . getTm) as
123 patvars (PPatvar _ n) = [n]
124 patvars (PPatvar _ n) = [n]
@@ -357,3 +358,23 @@ mkWith str n = let str' = replaceRHS str "with (_)"
357 | not ('=' `elem` rest) = str
358 | not ('=' `elem` rest) = str
358 replaceRHS (x : rest) str = x : replaceRHS rest str
359 replaceRHS (x : rest) str = x : replaceRHS rest str
361+-- Replace _ with names in missing clauses
363+nameMissing :: [PTerm] -> Idris [PTerm]
364+nameMissing ps = do ist <- get
365+ newPats <- mapM nm ps
366+ let newPats' = mergeAllPats ist (UN "_") (base (head ps))
368+ return (map fst newPats')
370+ base (PApp fc f args) = PApp fc f (map (fmap (const (PRef fc (UN "_")))) args)
373+ nm ptm = do mptm <- elabNewPat ptm
375+ Nothing -> return ptm
376+ Just ptm' -> return ptm'