diff options
author | Péter Diviánszky <divipp@gmail.com> | 2016-02-18 18:34:47 +0100 |
---|---|---|
committer | Péter Diviánszky <divipp@gmail.com> | 2016-02-19 02:50:09 +0100 |
commit | 998ae8f884f4b1d4e092ebdf3a441b97b2cf05b7 (patch) | |
tree | 6ced17ee38fa78de69b05c8765288ecabe52fb6e /src/LambdaCube/Compiler.hs | |
parent | 27c8f3aeb2d13da0bec522ee8a8a98f534fa39e8 (diff) |
tuples are heterogeneous lists
Diffstat (limited to 'src/LambdaCube/Compiler.hs')
-rw-r--r-- | src/LambdaCube/Compiler.hs | 12 |
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 | |||
28 | import Data.Function | 28 | import Data.Function |
29 | import Data.Map.Strict (Map) | 29 | import Data.Map.Strict (Map) |
30 | import qualified Data.Map.Strict as Map | 30 | import qualified Data.Map.Strict as Map |
31 | import Control.Monad.State | 31 | import Control.Monad.State.Strict |
32 | import Control.Monad.Reader | 32 | import Control.Monad.Reader |
33 | import Control.Monad.Writer | 33 | import Control.Monad.Writer |
34 | import Control.Monad.Except | 34 | import Control.Monad.Except |
@@ -47,7 +47,7 @@ import LambdaCube.IR as IR | |||
47 | import LambdaCube.Compiler.Pretty hiding ((</>)) | 47 | import LambdaCube.Compiler.Pretty hiding ((</>)) |
48 | import LambdaCube.Compiler.Parser (Module(..), Export(..), ImportItems (..), runDefParser, parseLC) | 48 | import LambdaCube.Compiler.Parser (Module(..), Export(..), ImportItems (..), runDefParser, parseLC) |
49 | import LambdaCube.Compiler.Lexer as Exported (Range(..)) | 49 | import LambdaCube.Compiler.Lexer as Exported (Range(..)) |
50 | import LambdaCube.Compiler.Infer (PolyEnv(..), showError, joinPolyEnvs, filterPolyEnv, inference_, extractDesugarInfo) | 50 | import LambdaCube.Compiler.Infer (PolyEnv(..), showError, joinPolyEnvs, filterPolyEnv, inference_) |
51 | import LambdaCube.Compiler.Infer as Exported (Infos, listAllInfos, listTypeInfos, listTraceInfos, Exp, outputType, boolType, trueExp, unfixlabel) | 51 | import LambdaCube.Compiler.Infer as Exported (Infos, listAllInfos, listTypeInfos, listTraceInfos, Exp, outputType, boolType, trueExp, unfixlabel) |
52 | import LambdaCube.Compiler.CoreToIR | 52 | import 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) |