Skip to content

Commit 10e01ab

Browse files
committed
fixup! ;fix:ui: fix thunk and other accumulations
1 parent e0d23c1 commit 10e01ab

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

hledger-ui/Hledger/UI/UIScreens.hs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -241,11 +241,12 @@ rsNew uopts d j acct forceinclusive = -- XXX forcedefaultselection - whether to
241241
}
242242

243243
-- | Update a register screen from these options, reporting date, and journal.
244-
rsUpdate :: UIOpts -> Day -> Journal -> RegisterScreenState -> RegisterScreenState
245-
rsUpdate uopts d j rss@RSS{_rssAccount, _rssForceInclusive, _rssList=oldlist} =
246-
dbgui "rsUpdate"
244+
rsUpdate uopts d j rss@RSS{_rssAccount, _rssForceInclusive} =
245+
dbgui "rsUpdate" $
247246
rss{_rssList=l'}
248247
where
248+
-- Force evaluation of old list to allow GC
249+
!oldlist = _rssList rss
249250
UIOpts{uoCliOpts=copts@CliOpts{reportspec_=rspec@ReportSpec{_rsReportOpts=ropts}}} = uopts
250251
-- gather arguments and queries
251252
-- XXX temp
@@ -309,7 +310,8 @@ rsUpdate uopts d j rss@RSS{_rssAccount, _rssForceInclusive, _rssList=oldlist} =
309310
}
310311

311312
-- build the new list widget
312-
!l = list RegisterList (V.fromList $ displayitems ++ blankitems) 1
313+
!itemsVector = V.fromList $ displayitems ++ blankitems
314+
!l = list RegisterList itemsVector 1
313315

314316
-- ensure the appropriate list item is selected:
315317
-- if forcedefaultselection is true, the last (latest) transaction; XXX still needed ?

hledger-ui/Hledger/UI/UIState.hs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ import Hledger
5959
import Hledger.Cli.CliOptions
6060
import Hledger.UI.UITypes
6161
import Hledger.UI.UIOptions (UIOpts(uoCliOpts))
62-
import Hledger.UI.UIScreens (screenUpdate)
62+
import Hledger.UI.UIScreens
6363
import Hledger.UI.UIUtils (showScreenId, showScreenStack)
6464

6565
-- | Make an initial UI state with the given options, journal,
@@ -369,8 +369,15 @@ resetScreens d ui@UIState{astartupopts=origopts, ajournal=j, aScreen=s,aPrevScre
369369
-- XXX Currently this does not properly regenerate the transaction screen or error screen,
370370
-- which depend on state from their parent(s); those screens' handlers must do additional work, which is fragile.
371371
regenerateScreens :: Journal -> Day -> UIState -> UIState
372-
regenerateScreens j d ui@UIState{aopts=opts, aScreen=s,aPrevScreens=ss} =
373-
let !newScreen = screenUpdate opts d j s
374-
!newPrevScreens = map (screenUpdate opts d j) ss
375-
!newJournal = j
376-
in ui{ajournal=newJournal, aScreen=newScreen, aPrevScreens=newPrevScreens}
372+
regenerateScreens j d ui@UIState{aScreen=s} =
373+
let !ui' = ui{ajournal=j, aScreen=s'}
374+
!s' = case s of
375+
MS mss -> MS $! msUpdate mss
376+
AS ass -> AS $! asUpdate (aopts ui') d j ass
377+
CS ass -> CS $! csUpdate (aopts ui') d j ass
378+
BS ass -> BS $! bsUpdate (aopts ui') d j ass
379+
IS ass -> IS $! isUpdate (aopts ui') d j ass
380+
RS rss -> RS $! rsUpdate (aopts ui') d j rss
381+
TS tss -> TS $! tsUpdate tss
382+
ES _ -> s
383+
in ui'

0 commit comments

Comments
 (0)