Skip to content

Commit ea6e8c5

Browse files
committed
Reduce: reduce: reduce (=<< -> <$>)
1 parent a86140e commit ea6e8c5

File tree

1 file changed

+36
-23
lines changed

1 file changed

+36
-23
lines changed

src/Nix/Reduce.hs

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -245,29 +245,42 @@ reduce (NWith_ ann scope body) =
245245

246246
-- | Reduce a let binds section by pushing lambdas,
247247
-- constants and strings to the body scope.
248-
reduce (NLet_ ann binds body) = do
249-
s <- fmap (M.fromList . catMaybes) $ forM binds $ \case
250-
NamedVar (StaticKey name :| []) def _pos -> def >>= \case
251-
d@(Fix NAbs_{} ) -> pure $ pure (name, d)
252-
d@(Fix NConstant_{}) -> pure $ pure (name, d)
253-
d@(Fix NStr_{} ) -> pure $ pure (name, d)
254-
_ -> pure Nothing
255-
_ -> pure Nothing
256-
body' <- pushScope s body
257-
binds' <- traverse sequence binds
258-
-- let names = gatherNames body'
259-
-- binds' <- traverse sequence binds <&> \b -> flip filter b $ \case
260-
-- NamedVar (StaticKey name _ :| mempty) _ ->
261-
-- name `S.member` names
262-
-- _ -> True
263-
pure $ Fix $ NLet_ ann binds' body'
264-
-- where
265-
-- go m [] = pure m
266-
-- go m (x:xs) = case x of
267-
-- NamedVar (StaticKey name _ :| mempty) def -> do
268-
-- v <- pushScope m def
269-
-- go (M.insert name v m) xs
270-
-- _ -> go m xs
248+
reduce (NLet_ ann binds body) =
249+
do
250+
s <-
251+
M.fromList . catMaybes <$>
252+
traverse
253+
(\case
254+
NamedVar (StaticKey name :| []) def _pos ->
255+
let
256+
defcase =
257+
\case
258+
d@(Fix NAbs_{} ) -> pure (name, d)
259+
d@(Fix NConstant_{}) -> pure (name, d)
260+
d@(Fix NStr_{} ) -> pure (name, d)
261+
_ -> Nothing
262+
in
263+
defcase <$> def
264+
265+
_ -> pure Nothing
266+
267+
)
268+
binds
269+
body' <- pushScope s body
270+
binds' <- traverse sequence binds
271+
-- let names = gatherNames body'
272+
-- binds' <- traverse sequence binds <&> \b -> flip filter b $ \case
273+
-- NamedVar (StaticKey name _ :| mempty) _ ->
274+
-- name `S.member` names
275+
-- _ -> True
276+
pure $ Fix $ NLet_ ann binds' body'
277+
-- where
278+
-- go m [] = pure m
279+
-- go m (x:xs) = case x of
280+
-- NamedVar (StaticKey name _ :| mempty) def -> do
281+
-- v <- pushScope m def
282+
-- go (M.insert name v m) xs
283+
-- _ -> go m xs
271284

272285
-- | Reduce an if to the relevant path if
273286
-- the condition is a boolean constant.

0 commit comments

Comments
 (0)