git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix some issues with the order of desugaring passes
200aafcPhil Freeman
examples/passing/RedefinedFixity.purs+1−1
@@ -12,7 +12,7 @@ module M3 where
12
12
13import M1
13import M1
14import M2
14import M2
15−
15+
16module Main where
16module Main where
17
17
18main = Debug.Trace.trace "Done"
18main = Debug.Trace.trace "Done"
src/Language/PureScript/Sugar.hs+2−2
@@ -51,9 +51,9 @@ import Language.PureScript.Sugar.Names as S
51desugar :: [Module] -> Either String [Module]
51desugar :: [Module] -> Either String [Module]
52desugar = rebracket
52desugar = rebracket
53 >=> desugarDo
53 >=> desugarDo
54+ >=> desugarCasesModule
54 >=> desugarLetBindings
55 >=> desugarLetBindings
55− >>> desugarCasesModule
56+ >>> desugarImports
56 >=> desugarTypeDeclarationsModule
57 >=> desugarTypeDeclarationsModule
57− >=> desugarImports
58 >=> desugarTypeClasses
58 >=> desugarTypeClasses
59 >=> createBindingGroupsModule
59 >=> createBindingGroupsModule
src/Language/PureScript/Sugar/CaseDeclarations.hs+9−3
@@ -22,8 +22,8 @@ module Language.PureScript.Sugar.CaseDeclarations (
22import Data.List (groupBy)
22import Data.List (groupBy)
23import Data.Generics (mkT, everywhere)
23import Data.Generics (mkT, everywhere)
24
24
25−import Control.Applicative ((<$>))
25+import Control.Applicative
26−import Control.Monad (forM, join, unless)
26+import Control.Monad ((<=<), forM, join, unless)
27import Control.Monad.Error.Class
27import Control.Monad.Error.Class
28
28
29import Language.PureScript.Names
29import Language.PureScript.Names
@@ -51,7 +51,13 @@ desugarAbs = everywhere (mkT replace)
51-- Replace all top-level binders with case expressions.
51-- Replace all top-level binders with case expressions.
52--
52--
53desugarCases :: [Declaration] -> Either String [Declaration]
53desugarCases :: [Declaration] -> Either String [Declaration]
54−desugarCases = fmap join . mapM toDecls . groupBy inSameGroup
54+desugarCases = desugarRest <=< fmap join . mapM toDecls . groupBy inSameGroup
55+ where
56+ desugarRest :: [Declaration] -> Either String [Declaration]
57+ desugarRest ((TypeInstanceDeclaration constraints className tys ds) : rest) =
58+ (:) <$> (TypeInstanceDeclaration constraints className tys <$> desugarCases ds) <*> desugarRest rest
59+ desugarRest (d : ds) = (:) d <$> desugarRest ds
60+ desugarRest [] = pure []
55
61
56inSameGroup :: Declaration -> Declaration -> Bool
62inSameGroup :: Declaration -> Declaration -> Bool
57inSameGroup (ValueDeclaration ident1 _ _ _) (ValueDeclaration ident2 _ _ _) = ident1 == ident2
63inSameGroup (ValueDeclaration ident1 _ _ _) (ValueDeclaration ident2 _ _ _) = ident1 == ident2
src/Language/PureScript/Sugar/Names.hs+1−1
@@ -226,7 +226,7 @@ resolveImports env (Module currentModule decls) =
226 scope :: M.Map ModuleName (Maybe ExplicitImports)
226 scope :: M.Map ModuleName (Maybe ExplicitImports)
227 scope = M.insert currentModule Nothing (findImports decls)
227 scope = M.insert currentModule Nothing (findImports decls)
228 resolveImport' imp (mn, i) = do
228 resolveImport' imp (mn, i) = do
229− m <- maybe (throwError $ "Cannot import from unknown module '" ++ show mn ++ "'") return $ mn `M.lookup` env
229+ let m = fromMaybe (Exports S.empty S.empty S.empty) $ mn `M.lookup` env
230 resolveImport currentModule mn m imp i
230 resolveImport currentModule mn m imp i
231
231
232-- |
232-- |