@@ -63,15 +63,15 @@ checkAddDef add toplvl fc ((n, (i, top, t)) : ns)
6363-- return (n, (i, top, t'))) ns
6464
6565-- | Elaborate a top-level type declaration - for example, "foo : Int -> Int".
66−elabType :: ElabInfo -> SyntaxInfo -> String ->
66+elabType :: ElabInfo -> SyntaxInfo -> String -> [(Name, String)] ->
6767 FC -> FnOpts -> Name -> PTerm -> Idris Type
6868elabType = elabType' False
6969
7070elabType' :: Bool -> -- normalise it
71− ElabInfo -> SyntaxInfo -> String ->
71+ ElabInfo -> SyntaxInfo -> String -> [(Name, String)] ->
7272 FC -> FnOpts -> Name -> PTerm -> Idris Type
73−elabType' norm info syn doc fc opts n ty' = {- let ty' = piBind (params info) ty_in
74− n = liftname info n_in in -}
73+elabType' norm info syn doc argDocs fc opts n ty' = {- let ty' = piBind (params info) ty_in
74+ n = liftname info n_in in -}
7575 do checkUndefined fc n
7676 ctxt <- getContext
7777 i <- getIState
@@ -122,7 +122,8 @@ elabType' norm info syn doc fc opts n ty' = {- let ty' = piBind (params info) ty
122122 let ds' = map (\(n, (i, top, t)) -> (n, (i, top, t, True))) ds
123123 addDeferred ds'
124124 setFlags n opts'
125− addDocStr n doc
125+ checkDocs fc argDocs ty
126+ addDocStr n doc argDocs
126127 addIBC (IBCDoc n)
127128 addIBC (IBCFlags n opts')
128129 when (Implicit `elem` opts) $ do addCoercion n
@@ -167,13 +168,13 @@ elabType' norm info syn doc fc opts n ty' = {- let ty' = piBind (params info) ty
167168 , ns2 == map txt ["Maybe", "Prelude"]
168169 , ns3 == map txt ["List", "Prelude"]
169170 , ns4 == map txt ["Errors","Reflection","Language"] = True
170− tyIsHandler _ = False
171+ tyIsHandler _ = False
171172
172173
173174elabPostulate :: ElabInfo -> SyntaxInfo -> String ->
174175 FC -> FnOpts -> Name -> PTerm -> Idris ()
175176elabPostulate info syn doc fc opts n ty
176− = do elabType info syn doc fc opts n ty
177+ = do elabType info syn doc [] fc opts n ty
177178 -- make sure it's collapsible, so it is never needed at run time
178179 -- start by getting the elaborated type
179180 ctxt <- getContext
@@ -194,8 +195,8 @@ elabPostulate info syn doc fc opts n ty
194195 -- remove it from the deferred definitions list
195196 solveDeferred n
196197
197−elabData :: ElabInfo -> SyntaxInfo -> String -> FC -> DataOpts -> PData -> Idris ()
198−elabData info syn doc fc opts (PLaterdecl n t_in)
198+elabData :: ElabInfo -> SyntaxInfo -> String -> [(Name, String)] -> FC -> DataOpts -> PData -> Idris ()
199+elabData info syn doc argDocs fc opts (PLaterdecl n t_in)
199200 = do let codata = Codata `elem` opts
200201 iLOG (show (fc, doc))
201202 checkUndefined fc n
@@ -213,7 +214,7 @@ elabData info syn doc fc opts (PLaterdecl n t_in)
213214 logLvl 2 $ "---> " ++ show cty
214215 updateContext (addTyDecl n (TCon 0 0) cty) -- temporary, to check cons
215216
216−elabData info syn doc fc opts (PDatadecl n t_in dcons)
217+elabData info syn doc argDocs fc opts (PDatadecl n t_in dcons)
217218 = do let codata = Codata `elem` opts
218219 iLOG (show fc)
219220 undef <- isUndefined fc n
@@ -241,12 +242,13 @@ elabData info syn doc fc opts (PDatadecl n t_in dcons)
241242 let as = map (const Nothing) (getArgTys cty)
242243 let params = findParams (map snd cons)
243244 logLvl 2 $ "Parameters : " ++ show params
244− putIState (i { idris_datatypes =
245+ putIState (i { idris_datatypes =
245246 addDef n (TI (map fst cons) codata opts params)
246247 (idris_datatypes i) })
247248 addIBC (IBCDef n)
248249 addIBC (IBCData n)
249− addDocStr n doc
250+ checkDocs fc argDocs t_in
251+ addDocStr n doc argDocs
250252 addIBC (IBCDoc n)
251253 let metainf = DataMI params
252254 addIBC (IBCMetaInformation n metainf)
@@ -258,10 +260,10 @@ elabData info syn doc fc opts (PDatadecl n t_in dcons)
258260 if DefaultEliminator `elem` opts then evalStateT (elabEliminator params n t dcons info) Map.empty
259261 else return ()
260262 where
261− checkDefinedAs fc n t ctxt
263+ checkDefinedAs fc n t ctxt
262264 = case lookupDef n ctxt of
263265 [] -> return ()
264− [TyDecl _ ty] ->
266+ [TyDecl _ ty] ->
265267 case converts ctxt [] t ty of
266268 OK () -> return ()
267269 _ -> tclift $ tfail (At fc (AlreadyDefined n))
@@ -319,7 +321,8 @@ elabData info syn doc fc opts (PDatadecl n t_in dcons)
319321type EliminatorState = StateT (Map.Map String Int) Idris
320322
321323-- TODO: Use uniqueName for generating names, rewrite everything to use idris_implicits instead of manual splitting, generally just rewrite
322−elabEliminator :: [Int] -> Name -> PTerm -> [(String, Name, PTerm, FC, [Name])] ->
324+elabEliminator :: [Int] -> Name -> PTerm ->
325+ [(String, [(Name, String)], Name, PTerm, FC, [Name])] ->
323326 ElabInfo -> EliminatorState ()
324327elabEliminator paramPos n ty cons info = do
325328 elimLog $ "Elaborating eliminator"
@@ -328,15 +331,15 @@ elabEliminator paramPos n ty cons info = do
328331 generalParams <- namePis False pms
329332 motiveIdxs <- namePis False idxs
330333 let motive = mkMotive n paramPos generalParams motiveIdxs
331− consTerms <- mapM (\(c@(_,cnm,_,_,_)) -> do
332− name <- freshName $ "elim_" ++ simpleName cnm
333− consTerm <- extractConsTerm c generalParams
334− return (name, expl, consTerm)) cons
334+ consTerms <- mapM (\(c@(_, _, cnm, _, _, _)) -> do
335+ name <- freshName $ "elim_" ++ simpleName cnm
336+ consTerm <- extractConsTerm c generalParams
337+ return (name, expl, consTerm)) cons
335338 scrutineeIdxs <- namePis False idxs
336339 let motiveConstr = [(motiveName, expl, motive)]
337340 let scrutinee = (scrutineeName, expl, applyCons n (interlievePos paramPos generalParams scrutineeIdxs 0))
338341 let eliminatorTy = piConstr (generalParams ++ motiveConstr ++ consTerms ++ scrutineeIdxs ++ [scrutinee]) (applyMotive (map (\(n,_,_) -> PRef elimFC n) scrutineeIdxs) (PRef elimFC scrutineeName))
339− let eliminatorTyDecl = PTy (show n) defaultSyntax elimFC [TotalFn] elimDeclName eliminatorTy
342+ let eliminatorTyDecl = PTy (show n) [] defaultSyntax elimFC [TotalFn] elimDeclName eliminatorTy
340343 let clauseConsElimArgs = map getPiName consTerms
341344 let clauseGeneralArgs' = map getPiName generalParams ++ [motiveName] ++ clauseConsElimArgs
342345 let clauseGeneralArgs = map (\arg -> pexp (PRef elimFC arg)) clauseGeneralArgs'
@@ -500,8 +503,8 @@ elabEliminator paramPos n ty cons info = do
500503 in return $ filter (\(n,_,_) -> not (n `elem` oldParams))implargs
501504 _ -> return implargs
502505
503− extractConsTerm :: (String, Name, PTerm, FC, [Name]) -> [(Name, Plicity, PTerm)] -> EliminatorState PTerm
504− extractConsTerm (doc, cnm, ty, fc, fs) generalParameters = do
506+ extractConsTerm :: (String, [(Name, String)], Name, PTerm, FC, [Name]) -> [(Name, Plicity, PTerm)] -> EliminatorState PTerm
507+ extractConsTerm (doc, argDocs, cnm, ty, fc, fs) generalParameters = do
505508 let cons' = replaceParams paramPos generalParameters ty
506509 let (args, resTy) = splitPi cons'
507510 implidxs <- implicitIndexes (doc, cnm, ty, fc, fs)
@@ -536,8 +539,8 @@ elabEliminator paramPos n ty cons info = do
536539 convertImplPi (PImp {getTm = t, pname = n}) = Just (n, expl, t)
537540 convertImplPi _ = Nothing
538541
539− generateEliminatorClauses :: (String, Name, PTerm, FC, [Name]) -> Name -> [PArg] -> [(Name, Plicity, PTerm)] -> EliminatorState PClause
540− generateEliminatorClauses (doc, cnm, ty, fc, fs) cnsElim generalArgs generalParameters = do
542+ generateEliminatorClauses :: (String, [(Name, String)], Name, PTerm, FC, [Name]) -> Name -> [PArg] -> [(Name, Plicity, PTerm)] -> EliminatorState PClause
543+ generateEliminatorClauses (doc, _, cnm, ty, fc, fs) cnsElim generalArgs generalParameters = do
541544 let cons' = replaceParams paramPos generalParameters ty
542545 let (args, resTy) = splitPi cons'
543546 i <- State.lift getIState
@@ -558,7 +561,7 @@ elabEliminator paramPos n ty cons info = do
558561
559562elabPrims :: Idris ()
560563elabPrims = do mapM_ (elabDecl EAll toplevel)
561− (map (\(opt, decl) -> PData "" defaultSyntax (fileFC "builtin") opt decl)
564+ (map (\(opt, decl) -> PData "" [] defaultSyntax (fileFC "builtin") opt decl)
562565 (zip
563566 [inferOpts, unitOpts, falseOpts, pairOpts, eqOpts]
564567 [inferDecl, unitDecl, falseDecl, pairDecl, eqDecl]))
@@ -662,7 +665,7 @@ elabProvider info syn fc what n ty tm
662665 Provide tm
663666 | what `elem` [ProvTerm, ProvAny] ->
664667 do -- Finally add a top-level definition of the provided term
665− elabType info syn "" fc [] n ty
668+ elabType info syn "" [] fc [] n ty
666669 elabClauses info fc [] n [PClause fc n (PApp fc (PRef fc n) []) [] (delab i tm) []]
667670 logLvl 1 $ "Elaborated provider " ++ show n ++ " as: " ++ show tm
668671 | otherwise ->
@@ -724,7 +727,7 @@ elabTransform info fc safe lhs_in rhs_in
724727elabRecord :: ElabInfo -> SyntaxInfo -> String -> FC -> Name ->
725728 PTerm -> String -> Name -> PTerm -> Idris ()
726729elabRecord info syn doc fc tyn ty cdoc cn cty
727− = do elabData info syn doc fc [] (PDatadecl tyn ty [(cdoc, cn, cty, fc, [])])
730+ = do elabData info syn doc [] fc [] (PDatadecl tyn ty [(cdoc, [], cn, cty, fc, [])])
728731 cty' <- implicit syn cn cty
729732 i <- getIState
730733 cty <- case lookupTy cn (tt_ctxt i) of
@@ -747,7 +750,7 @@ elabRecord info syn doc fc tyn ty cdoc cn cty
747750 where
748751-- syn = syn_in { syn_namespace = show (nsroot tyn) : syn_namespace syn_in }
749752
750− isNonImp (PExp _ _ _ _, a) = Just a
753+ isNonImp (PExp _ _ _, a) = Just a
751754 isNonImp _ = Nothing
752755
753756 tryElabDecl info (fn, ty, val)
@@ -759,15 +762,15 @@ elabRecord info syn doc fc tyn ty cdoc cn cty
759762 show fn ++ " (" ++ show ty ++ ")"
760763 putIState i)
761764
762− getImplB k (PPi (Imp l s _ _) n Placeholder sc)
765+ getImplB k (PPi (Imp l s _) n Placeholder sc)
763766 = getImplB k sc
764− getImplB k (PPi (Imp l s d p) n ty sc)
765− = getImplB (\x -> k (PPi (Imp l s d p) n ty x)) sc
767+ getImplB k (PPi (Imp l s p) n ty sc)
768+ = getImplB (\x -> k (PPi (Imp l s p) n ty x)) sc
766769 getImplB k (PPi _ n ty sc)
767770 = getImplB k sc
768771 getImplB k _ = k
769772
770− renameBs (PImp _ _ _ _ _ _ : ps) (PPi p n ty s)
773+ renameBs (PImp _ _ _ _ _ : ps) (PPi p n ty s)
771774 = PPi p (mkImp n) ty (renameBs ps (substMatch n (PRef fc (mkImp n)) s))
772775 renameBs (_:ps) (PPi p n ty s) = PPi p n ty (renameBs ps s)
773776 renameBs _ t = t
@@ -794,7 +797,7 @@ elabRecord info syn doc fc tyn ty cdoc cn cty
794797
795798 mkProj recty substs cimp ((pn_in, pty), pos)
796799 = do let pn = expandNS syn pn_in
797− let pfnTy = PTy "" defaultSyntax fc [] pn
800+ let pfnTy = PTy "" [] defaultSyntax fc [] pn
798801 (PPi expl rec recty
799802 (substMatches substs pty))
800803 let pls = repeat Placeholder
@@ -815,7 +818,7 @@ elabRecord info syn doc fc tyn ty cdoc cn cty
815818 let valname = sMN 0 "updateval"
816819 let pt = k (PPi expl pn pty
817820 (PPi expl rec recty recty))
818− let pfnTy = PTy "" defaultSyntax fc [] setname pt
821+ let pfnTy = PTy "" [] defaultSyntax fc [] setname pt
819822 let pls = map (\x -> PRef fc (sMN x "field")) [0..num-1]
820823 let lhsArgs = pls
821824 let rhsArgs = take pos pls ++ (PRef fc valname) :
@@ -831,8 +834,8 @@ elabRecord info syn doc fc tyn ty cdoc cn cty
831834 return (pn, pfnTy, PClauses fc [] setname [pclause])
832835
833836elabCon :: ElabInfo -> SyntaxInfo -> Name -> Bool ->
834− (String, Name, PTerm, FC, [Name]) -> Idris (Name, Type)
835−elabCon info syn tn codata (doc, n, t_in, fc, forcenames)
837+ (String, [(Name, String)], Name, PTerm, FC, [Name]) -> Idris (Name, Type)
838+elabCon info syn tn codata (doc, argDocs, n, t_in, fc, forcenames)
836839 = do checkUndefined fc n
837840 ctxt <- getContext
838841 i <- getIState
@@ -853,7 +856,8 @@ elabCon info syn tn codata (doc, n, t_in, fc, forcenames)
853856 tyIs cty'
854857 logLvl 2 $ "---> " ++ show n ++ " : " ++ show cty'
855858 addIBC (IBCDef n)
856− addDocStr n doc
859+ checkDocs fc argDocs t_in
860+ addDocStr n doc argDocs
857861 addIBC (IBCDoc n)
858862 let fs = map (getNamePos 0 t) forcenames
859863 -- FIXME: 'forcenames' is an almighty hack! Need a better way of
@@ -1158,7 +1162,7 @@ elabPE info fc caller r =
11581162 (map (\ (lhs, rhs) ->
11591163 (showTmImpls lhs ++ " = " ++
11601164 showTmImpls rhs)) pats)
1161− elabType info defaultSyntax "" fc opts newnm specTy
1165+ elabType info defaultSyntax "" [] fc opts newnm specTy
11621166 let def = map (\ (lhs, rhs) -> PClause fc newnm lhs [] rhs []) pats
11631167 elabClauses info fc opts newnm def
11641168 logLvl 1 $ "Specialised " ++ show newnm)
@@ -1276,7 +1280,7 @@ checkPossible info fc tcgen fname lhs_in
12761280 ((P _ x _, _), (P _ y _, _)) -> x == y
12771281 _ -> False
12781282
1279−getFixedInType i env (PExp _ _ _ _ : is) (Bind n (Pi t) sc)
1283+getFixedInType i env (PExp _ _ _ : is) (Bind n (Pi t) sc)
12801284 = getFixedInType i (n : env) is (instantiate (P Bound n t) sc)
12811285getFixedInType i env (_ : is) (Bind n (Pi t) sc)
12821286 = getFixedInType i (n : env) is (instantiate (P Bound n t) sc)
@@ -1500,7 +1504,7 @@ elabClause info opts (cnum, PClause fc fname lhs_in withs rhs_in whereblock)
15001504-- = NS (UN ('#':show x)) [show cnum, show fname]
15011505
15021506 sepBlocks bs = sepBlocks' [] bs where
1503− sepBlocks' ns (d@(PTy _ _ _ _ n t) : bs)
1507+ sepBlocks' ns (d@(PTy _ _ _ _ _ n t) : bs)
15041508 = let (bf, af) = sepBlocks' (n : ns) bs in
15051509 (d : bf, af)
15061510 sepBlocks' ns (d@(PClauses _ _ n _) : bs)
@@ -1744,10 +1748,10 @@ elabClass info syn doc fc constraints tn ps ds
17441748 let cty = impbind ps $ conbind constraints
17451749 $ pibind (map (\ (n, ty) -> (nsroot n, ty)) methods)
17461750 constraint
1747− let cons = [("", cn, cty, fc, [])]
1751+ let cons = [("", [], cn, cty, fc, [])]
17481752 let ddecl = PDatadecl tn tty cons
17491753 logLvl 5 $ "Class data " ++ show (showDImp True ddecl)
1750− elabData info (syn { no_imp = no_imp syn ++ mnames }) doc fc [] ddecl
1754+ elabData info (syn { no_imp = no_imp syn ++ mnames }) doc [] fc [] ddecl
17511755 -- for each constraint, build a top level function to chase it
17521756 logLvl 5 $ "Building functions"
17531757 let usyn = syn { using = map (\ (x,y) -> UImplicit x y) ps
@@ -1785,8 +1789,8 @@ elabClass info syn doc fc constraints tn ps ds
17851789 conbind (ty : ns) x = PPi constraint (sMN 0 "class") ty (conbind ns x)
17861790 conbind [] x = x
17871791
1788− getMName (PTy _ _ _ _ n _) = nsroot n
1789− tdecl allmeths (PTy doc syn _ o n t)
1792+ getMName (PTy _ _ _ _ _ n _) = nsroot n
1793+ tdecl allmeths (PTy doc _ syn _ o n t)
17901794 = do t' <- implicit' syn allmeths n t
17911795 logLvl 5 $ "Method " ++ show n ++ " : " ++ showTmImpls t'
17921796 return ( (n, (toExp (map fst ps) Exp t')),
@@ -1799,7 +1803,7 @@ elabClass info syn doc fc constraints tn ps ds
17991803 case lookup n mtys of
18001804 Just (syn, o, ty) -> do let ty' = insertConstraint c ty
18011805 let ds = map (decorateid defaultdec)
1802− [PTy "" syn fc [] n ty',
1806+ [PTy "" [] syn fc [] n ty',
18031807 PClauses fc (o ++ opts) n cs]
18041808 iLOG (show ds)
18051809 return (n, ((defaultdec n, ds!!1), ds))
@@ -1809,7 +1813,7 @@ elabClass info syn doc fc constraints tn ps ds
18091813 defaultdec (UN n) = sUN ("default#" ++ str n)
18101814 defaultdec (NS n ns) = NS (defaultdec n) ns
18111815
1812− tydecl (PTy _ _ _ _ _ _) = True
1816+ tydecl (PTy _ _ _ _ _ _ _) = True
18131817 tydecl _ = False
18141818 instdecl (PInstance _ _ _ _ _ _ _ _) = True
18151819 instdecl _ = False
@@ -1837,7 +1841,7 @@ elabClass info syn doc fc constraints tn ps ds
18371841 addInstance False conn' cfn
18381842 addIBC (IBCInstance False conn' cfn)
18391843-- iputStrLn ("Added " ++ show (conn, cfn, ty))
1840− return [PTy "" syn fc [] cfn ty,
1844+ return [PTy "" [] syn fc [] cfn ty,
18411845 PClauses fc [Dictionary] cfn [PClause fc cfn lhs [] rhs []]]
18421846
18431847 -- Generate a top level function which looks up a method in a given
@@ -1853,12 +1857,12 @@ elabClass info syn doc fc constraints tn ps ds
18531857 iLOG (showTmImpls ty)
18541858 iLOG (show (m, ty', capp, margs))
18551859 iLOG (showTmImpls lhs ++ " = " ++ showTmImpls rhs)
1856− return [PTy doc syn fc o m ty',
1860+ return [PTy doc [] syn fc o m ty',
18571861 PClauses fc [Inlinable] m [PClause fc m lhs [] rhs []]]
18581862
1859− getMArgs (PPi (Imp _ _ _ _) n ty sc) = IA : getMArgs sc
1860− getMArgs (PPi (Exp _ _ _ _) n ty sc) = EA : getMArgs sc
1861− getMArgs (PPi (Constraint _ _ _) n ty sc) = CA : getMArgs sc
1863+ getMArgs (PPi (Imp _ _ _) n ty sc) = IA : getMArgs sc
1864+ getMArgs (PPi (Exp _ _ _) n ty sc) = EA : getMArgs sc
1865+ getMArgs (PPi (Constraint _ _) n ty sc) = CA : getMArgs sc
18621866 getMArgs _ = []
18631867
18641868 getMeth (m:ms) (a:as) x | x == a = PRef fc m
@@ -1874,14 +1878,14 @@ elabClass info syn doc fc constraints tn ps ds
18741878 rhsArgs (CA : xs) ns = pconst (PResolveTC fc) : rhsArgs xs ns
18751879 rhsArgs [] _ = []
18761880
1877− insertConstraint c (PPi p@(Imp _ _ _ _) n ty sc)
1881+ insertConstraint c (PPi p@(Imp _ _ _) n ty sc)
18781882 = PPi p n ty (insertConstraint c sc)
18791883 insertConstraint c sc = PPi constraint (sMN 0 "class") c sc
18801884
18811885 -- make arguments explicit and don't bind class parameters
1882− toExp ns e (PPi (Imp l s _ p) n ty sc)
1886+ toExp ns e (PPi (Imp l s p) n ty sc)
18831887 | n `elem` ns = toExp ns e sc
1884− | otherwise = PPi (e l s "" p) n ty (toExp ns e sc)
1888+ | otherwise = PPi (e l s p) n ty (toExp ns e sc)
18851889 toExp ns e (PPi p n ty sc) = PPi p n ty (toExp ns e sc)
18861890 toExp ns e sc = sc
18871891
@@ -1901,7 +1905,7 @@ elabInstance info syn what fc cs n ps t expn ds = do
19011905 let constraint = PApp fc (PRef fc n) (map pexp ps)
19021906 let iname = mkiname n ps expn
19031907 when (what /= EDefns) $ do
1904− nty <- elabType' True info syn "" fc [] iname t
1908+ nty <- elabType' True info syn "" [] fc [] iname t
19051909 -- if the instance type matches any of the instances we have already,
19061910 -- and it's not a named instance, then it's overlapping, so report an error
19071911 case expn of
@@ -2009,17 +2013,17 @@ elabInstance info syn what fc cs n ps t expn ds = do
20092013
20102014 mkMethApp (n, _, _, ty)
20112015 = lamBind 0 ty (papp fc (PRef fc n) (methArgs 0 ty))
2012− lamBind i (PPi (Constraint _ _ _) _ _ sc) sc'
2016+ lamBind i (PPi (Constraint _ _) _ _ sc) sc'
20132017 = PLam (sMN i "meth") Placeholder (lamBind (i+1) sc sc')
20142018 lamBind i (PPi _ n ty sc) sc'
20152019 = PLam (sMN i "meth") Placeholder (lamBind (i+1) sc sc')
20162020 lamBind i _ sc = sc
2017− methArgs i (PPi (Imp _ _ _ _) n ty sc)
2018− = PImp 0 True [] n (PRef fc (sMN i "meth")) "" : methArgs (i+1) sc
2019− methArgs i (PPi (Exp _ _ _ _) n ty sc)
2020− = PExp 0 [] (PRef fc (sMN i "meth")) "" : methArgs (i+1) sc
2021− methArgs i (PPi (Constraint _ _ _) n ty sc)
2022− = PConstraint 0 [] (PResolveTC fc) "" : methArgs (i+1) sc
2021+ methArgs i (PPi (Imp _ _ _) n ty sc)
2022+ = PImp 0 True [] n (PRef fc (sMN i "meth")) : methArgs (i+1) sc
2023+ methArgs i (PPi (Exp _ _ _) n ty sc)
2024+ = PExp 0 [] (PRef fc (sMN i "meth")) : methArgs (i+1) sc
2025+ methArgs i (PPi (Constraint _ _) n ty sc)
2026+ = PConstraint 0 [] (PResolveTC fc) : methArgs (i+1) sc
20232027 methArgs i _ = []
20242028
20252029 papp fc f [] = f
@@ -2038,12 +2042,12 @@ elabInstance info syn what fc cs n ps t expn ds = do
20382042 decorate ns iname (UN n) = NS (SN (MethodN (UN n))) ns
20392043 decorate ns iname (NS (UN n) s) = NS (SN (MethodN (UN n))) ns
20402044
2041− mkTyDecl (n, op, t, _) = PTy "" syn fc op n t
2045+ mkTyDecl (n, op, t, _) = PTy "" [] syn fc op n t
20422046
20432047 conbind (ty : ns) x = PPi constraint (sMN 0 "class") ty (conbind ns x)
20442048 conbind [] x = x
20452049
2046− coninsert cs (PPi p@(Imp _ _ _ _) n t sc) = PPi p n t (coninsert cs sc)
2050+ coninsert cs (PPi p@(Imp _ _ _) n t sc) = PPi p n t (coninsert cs sc)
20472051 coninsert cs sc = conbind cs sc
20482052
20492053 insertDefaults :: IState -> Name ->
@@ -2101,7 +2105,7 @@ elabInstance info syn what fc cs n ps t expn ds = do
21012105 PClauses fc [Dictionary] cfn [PClause fc cfn lhs [] rhs []]]
21022106-}
21032107
2104−decorateid decorate (PTy doc s f o n t) = PTy doc s f o (decorate n) t
2108+decorateid decorate (PTy doc argdocs s f o n t) = PTy doc argdocs s f o (decorate n) t
21052109decorateid decorate (PClauses f o n cs)
21062110 = PClauses f o (decorate n) (map dc cs)
21072111 where dc (PClause fc n t as w ds) = PClause fc (decorate n) (dappname t) as w ds
@@ -2155,22 +2159,22 @@ elabDecl' _ info (PFix _ _ _)
21552159 = return () -- nothing to elaborate
21562160elabDecl' _ info (PSyntax _ p)
21572161 = return () -- nothing to elaborate
2158−elabDecl' what info (PTy doc s f o n ty)
2162+elabDecl' what info (PTy doc argdocs s f o n ty)
21592163 | what /= EDefns
21602164 = do iLOG $ "Elaborating type decl " ++ show n ++ show o
2161− elabType info s doc f o n ty
2165+ elabType info s doc argdocs f o n ty
21622166 return ()
21632167elabDecl' what info (PPostulate doc s f o n ty)
21642168 | what /= EDefns
21652169 = do iLOG $ "Elaborating postulate " ++ show n ++ show o
21662170 elabPostulate info s doc f o n ty
2167−elabDecl' what info (PData doc s f co d)
2171+elabDecl' what info (PData doc argDocs s f co d)
21682172 | what /= ETypes
21692173 = do iLOG $ "Elaborating " ++ show (d_name d)
2170− elabData info s doc f co d
2174+ elabData info s doc argDocs f co d
21712175 | otherwise
21722176 = do iLOG $ "Elaborating [type of] " ++ show (d_name d)
2173− elabData info s doc f co (PLaterdecl (d_name d) (d_tcon d))
2177+ elabData info s doc argDocs f co (PLaterdecl (d_name d) (d_tcon d))
21742178elabDecl' what info d@(PClauses f o n ps)
21752179 | what /= ETypes
21762180 = do iLOG $ "Elaborating clause " ++ show n
@@ -2227,7 +2231,7 @@ elabDecl' what info (PRecord doc s f tyn ty cdoc cn cty)
22272231 elabRecord info s doc f tyn ty cdoc cn cty
22282232 | otherwise
22292233 = do iLOG $ "Elaborating [type of] " ++ show tyn
2230− elabData info s doc f [] (PLaterdecl tyn ty)
2234+ elabData info s doc [] f [] (PLaterdecl tyn ty)
22312235elabDecl' _ info (PDSL n dsl)
22322236 = do i <- getIState
22332237 putIState (i { idris_dsls = addDef n dsl (idris_dsls i) })
@@ -2282,3 +2286,14 @@ inferredDiff fc inf user =
22822286 Right vs -> return False
22832287 Left (x, y) -> return True
22842288
2289+-- | Check a PTerm against documentation and ensure that every documented
2290+-- argument actually exists. This must be run _after_ implicits have been
2291+-- found, or it will give spurious errors.
2292+checkDocs :: FC -> [(Name, String)] -> PTerm -> Idris ()
2293+checkDocs fc args tm = cd (Map.fromList args) tm
2294+ where cd as (PPi _ n _ sc) = cd (Map.delete n as) sc
2295+ cd as _ | Map.null as = return ()
2296+ | otherwise = ierror . At fc . Msg $
2297+ "There is documentation for argument(s) "
2298+ ++ (concat . intersperse ", " . map show . Map.keys) as
2299+ ++ " but they were not found."