@@ -5,6 +5,8 @@ module Idris.ElabDecls where
55import Idris.AbsSyntax
66import Idris.Error
77import Idris.Delaborate
8+import Idris.Imports
9+import Paths_miniidris
810
911import Core.TT
1012import Core.Elaborate
@@ -13,6 +15,7 @@ import Core.Typecheck
1315import Core.CaseTree
1416
1517import Control.Monad
18+import Control.Monad.State
1619import Debug.Trace
1720
1821-- Data to pass to recursively called elaborators; e.g. for where blocks,
@@ -47,9 +50,9 @@ elabData info (PDatadecl n t dcons)
4750elabCon :: ElabInfo -> (Name, PTerm) -> Idris (Name, Type)
4851elabCon info (n, t)
4952 = do ctxt <- getContext
50− iLOG $ "Constructor " ++ show n ++ " : " ++ showImp True t
53+ logLvl 2 $ "Constructor " ++ show n ++ " : " ++ showImp True t
5154 (t', log) <- tclift $ elaborate ctxt n (Set 0) (build info False t)
52−-- iLOG $ "Rechecking " ++ show t'
55+-- logLvl 2 $ "Rechecking " ++ show t'
5356 (cty, _) <- tclift $ recheck ctxt [] t'
5457 logLvl 2 $ "---> " ++ show n ++ " : " ++ show cty
5558 return (n, cty)
@@ -79,7 +82,7 @@ elabVal info tm
7982 (build info True (infTerm tm))
8083 logLvl 3 ("Value: " ++ show tm')
8184 let vtm = getInferTerm tm'
82− iLOG (show vtm)
85+ logLvl 2 (show vtm)
8386 tclift $ recheck ctxt [] vtm
8487
8588elabClause :: ElabInfo -> PClause -> Idris (Term, Term)
@@ -99,7 +102,7 @@ elabClause info (PClause fname lhs rhs whereblock)
99102 let winfo = pinfo (pvars ist lhs_tm) whereblock windex
100103 mapM_ (elabDecl' winfo) whereblock
101104 -- Now build the RHS, using the type of the LHS as the goal.
102− iLOG (showImp True rhs)
105+ logLvl 2 (showImp True rhs)
103106 ctxt <- getContext -- new context with where block added
104107 (rhs', _) <- tclift $ elaborate ctxt (MN 0 "patRHS") clhsty
105108 (do pbinds lhs_tm
@@ -133,18 +136,19 @@ elabClause info (PClause fname lhs rhs whereblock)
133136 _ -> MN i (show n)) . l
134137 }
135138
139+-- TODO: Also build a 'binary' version of each declaration for fast reloading
140+
136141elabDecl :: ElabInfo -> PDecl -> Idris ()
137142elabDecl info d = idrisCatch (elabDecl' info d) (\e -> iputStrLn (report e))
138143
139144elabDecl' info (PFix _ _) = return () -- nothing to elaborate
140145elabDecl' info (PTy n ty) = do iLOG $ "Elaborating type decl " ++ show n
141146 elabType info n ty
142−elabDecl' info (PData d) = do iLOG $ "Elaborating " ++ show d
147+elabDecl' info (PData d) = do iLOG $ "Elaborating " ++ show (d_name d)
143148 elabData info d
144149elabDecl' info d@(PClauses n ps) = do iLOG $ "Elaborating clause " ++ show n
145150 elabClauses info n ps
146−elabDecl' info (PParams ns ps) = do iLOG $ "Params block " ++ show ns
147− mapM_ (elabDecl' pinfo) ps
151+elabDecl' info (PParams ns ps) = mapM_ (elabDecl' pinfo) ps
148152 where
149153 pinfo = let ds = concatMap declared ps
150154 newps = params info ++ ns
@@ -152,6 +156,8 @@ elabDecl' info (PParams ns ps) = do iLOG $ "Params block " ++ show ns
152156 newb = addAlist dsParams (inblock info) in
153157 info { params = newps,
154158 inblock = newb }
159+-- elabDecl' info (PImport i) = loadModule i
160+
155161
156162-- Using the elaborator, convert a term in raw syntax to a fully
157163-- elaborated, typechecked term.