summaryrefslogtreecommitdiff
path: root/src/LambdaCube/Compiler.hs
diff options
context:
space:
mode:
authorPéter Diviánszky <divipp@gmail.com>2016-02-18 18:34:47 +0100
committerPéter Diviánszky <divipp@gmail.com>2016-02-19 02:50:09 +0100
commit998ae8f884f4b1d4e092ebdf3a441b97b2cf05b7 (patch)
tree6ced17ee38fa78de69b05c8765288ecabe52fb6e /src/LambdaCube/Compiler.hs
parent27c8f3aeb2d13da0bec522ee8a8a98f534fa39e8 (diff)
tuples are heterogeneous lists
Diffstat (limited to 'src/LambdaCube/Compiler.hs')
-rw-r--r--src/LambdaCube/Compiler.hs12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/LambdaCube/Compiler.hs b/src/LambdaCube/Compiler.hs
index fc9068cc..54013b74 100644
--- a/src/LambdaCube/Compiler.hs
+++ b/src/LambdaCube/Compiler.hs
@@ -28,7 +28,7 @@ import Data.List
28import Data.Function 28import Data.Function
29import Data.Map.Strict (Map) 29import Data.Map.Strict (Map)
30import qualified Data.Map.Strict as Map 30import qualified Data.Map.Strict as Map
31import Control.Monad.State 31import Control.Monad.State.Strict
32import Control.Monad.Reader 32import Control.Monad.Reader
33import Control.Monad.Writer 33import Control.Monad.Writer
34import Control.Monad.Except 34import Control.Monad.Except
@@ -47,7 +47,7 @@ import LambdaCube.IR as IR
47import LambdaCube.Compiler.Pretty hiding ((</>)) 47import LambdaCube.Compiler.Pretty hiding ((</>))
48import LambdaCube.Compiler.Parser (Module(..), Export(..), ImportItems (..), runDefParser, parseLC) 48import LambdaCube.Compiler.Parser (Module(..), Export(..), ImportItems (..), runDefParser, parseLC)
49import LambdaCube.Compiler.Lexer as Exported (Range(..)) 49import LambdaCube.Compiler.Lexer as Exported (Range(..))
50import LambdaCube.Compiler.Infer (PolyEnv(..), showError, joinPolyEnvs, filterPolyEnv, inference_, extractDesugarInfo) 50import LambdaCube.Compiler.Infer (PolyEnv(..), showError, joinPolyEnvs, filterPolyEnv, inference_)
51import LambdaCube.Compiler.Infer as Exported (Infos, listAllInfos, listTypeInfos, listTraceInfos, Exp, outputType, boolType, trueExp, unfixlabel) 51import LambdaCube.Compiler.Infer as Exported (Infos, listAllInfos, listTypeInfos, listTraceInfos, Exp, outputType, boolType, trueExp, unfixlabel)
52import LambdaCube.Compiler.CoreToIR 52import LambdaCube.Compiler.CoreToIR
53 53
@@ -148,20 +148,20 @@ loadModule imp mname_ = do
148 do 148 do
149 ms <- mapM loadModuleImports $ moduleImports e 149 ms <- mapM loadModuleImports $ moduleImports e
150 x' <- {-trace ("loading " ++ fname) $-} do 150 x' <- {-trace ("loading " ++ fname) $-} do
151 env@(PolyEnv ge _) <- joinPolyEnvs False ms 151 env@(PolyEnv ge _ ds) <- joinPolyEnvs False ms
152 defs <- MMT $ mapExceptT (return . runIdentity) $ runDefParser (extractDesugarInfo ge) $ definitions e 152 defs <- MMT $ mapExceptT (return . runIdentity) $ runDefParser ds $ definitions e
153 srcs <- gets $ Map.mapMaybe (either (const Nothing) (Just . snd)) 153 srcs <- gets $ Map.mapMaybe (either (const Nothing) (Just . snd))
154 x <- MMT $ mapExceptT (lift . lift . mapWriterT (return . first (left $ showError (Map.insert fname src srcs)) . runIdentity)) $ inference_ env (extensions e) defs 154 x <- MMT $ mapExceptT (lift . lift . mapWriterT (return . first (left $ showError (Map.insert fname src srcs)) . runIdentity)) $ inference_ env (extensions e) defs
155 case moduleExports e of 155 case moduleExports e of
156 Nothing -> return x 156 Nothing -> return x
157 Just es -> joinPolyEnvs False $ flip map es $ \exp -> case exp of 157 Just es -> joinPolyEnvs False $ flip map es $ \exp -> case exp of
158 ExportId (snd -> d) -> case Map.lookup d $ getPolyEnv x of 158 ExportId (snd -> d) -> case Map.lookup d $ getPolyEnv x of
159 Just def -> PolyEnv (Map.singleton d def) mempty 159 Just def -> PolyEnv (Map.singleton d def) mempty mempty{-TODO-}
160 Nothing -> error $ d ++ " is not defined" 160 Nothing -> error $ d ++ " is not defined"
161 ExportModule (snd -> m) | m == mname -> x 161 ExportModule (snd -> m) | m == mname -> x
162 ExportModule m -> case [ ms 162 ExportModule m -> case [ ms
163 | ((m', is), ms) <- zip (moduleImports e) ms, m' == m] of 163 | ((m', is), ms) <- zip (moduleImports e) ms, m' == m] of
164 [PolyEnv x infos] -> PolyEnv x mempty -- TODO 164 [PolyEnv x infos ds] -> PolyEnv x mempty{-TODO-} ds
165 [] -> error $ "empty export list: " ++ show (fname, m, map fst $ moduleImports e, mname) 165 [] -> error $ "empty export list: " ++ show (fname, m, map fst $ moduleImports e, mname)
166 _ -> error "export list: internal error" 166 _ -> error "export list: internal error"
167 modify $ Map.insert fname $ Right (x', src) 167 modify $ Map.insert fname $ Right (x', src)