git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Changes to binding name preservation improvements based on pull req feedback
commit5837be770c4b9c3d65da446a0560a535dc757dd9 authorAndy Arvanitis <andyarvanitis@gmail.com> dateSun 15 Mar 2015, 13:00 (12 years ago) parent703dd66
1 file changed+13−8
src/Language/PureScript/Sugar/CaseDeclarations.hs+13−8
src/Language/PureScript/Sugar/CaseDeclarations.hs+13−8
@@ -119,27 +119,32 @@ toTuple _ = error "Not a value declaration"
119119
120120makeCaseDeclaration :: (Functor m, Applicative m, MonadSupply m, MonadError MultipleErrors m) => Ident -> [([Binder], Either [(Guard, Expr)] Expr)] -> m Declaration
121121makeCaseDeclaration ident alternatives = do
122− let argPattern = length . fst . head $ alternatives
123− args <- mapM argName (foldl1 (zipWith resolveIdents) namedArgs)
122+ let namedArgs = map findName . fst <$> alternatives
123+ args <- mapM argName $ foldl1 resolveNames namedArgs
124124 let
125125 vars = map (Var . Qualified Nothing) args
126126 binders = [ CaseAlternative bs result | (bs, result) <- alternatives ]
127127 value = foldr (Abs . Left) (Case vars binders) args
128128 return $ ValueDeclaration ident Value [] (Right value)
129129 where
130− namedArgs = findNames . fst <$> alternatives
131− findNames names = findName <$> names
130+ findName :: Binder -> Maybe Ident
132131 findName (VarBinder name) = Just name
132+ findName (PositionedBinder _ _ binder) = findName binder
133133 findName _ = Nothing
134134
135+ argName :: (MonadSupply m) => Maybe Ident -> m Ident
135136 argName (Just name) = return name
136137 argName Nothing = do
137138 name <- freshName
138139 return (Ident name)
139140
140− resolveIdents (Just a) (Just b)
141+ resolveNames :: [Maybe Ident] -> [Maybe Ident] -> [Maybe Ident]
142+ resolveNames = zipWith resolveName
143+
144+ resolveName :: Maybe Ident -> Maybe Ident -> Maybe Ident
145+ resolveName (Just a) (Just b)
141146 | a == b = Just a
142147 | otherwise = Nothing
143− resolveIdents Nothing Nothing = Nothing
144− resolveIdents (Just a) Nothing = Just a
145− resolveIdents Nothing (Just b) = Just b
148+ resolveName Nothing Nothing = Nothing
149+ resolveName (Just a) Nothing = Just a
150+ resolveName Nothing (Just b) = Just b