mirror of
https://github.com/fjvallarino/monomer.git
synced 2024-09-20 16:27:49 +03:00
Use foldl' when possible
This commit is contained in:
parent
767a458e75
commit
8bd485c2b8
@ -1,7 +1,8 @@
|
||||
module Monomer.Event.Core where
|
||||
|
||||
import Data.Traversable
|
||||
import Data.List (foldl')
|
||||
import Data.Sequence (Seq, (|>))
|
||||
import Data.Traversable
|
||||
|
||||
import qualified Data.Sequence as Seq
|
||||
import qualified SDL
|
||||
@ -54,7 +55,7 @@ isUpdateUserState (UpdateUserState _) = True
|
||||
isUpdateUserState _ = False
|
||||
|
||||
getUpdateUserStates :: (Traversable t) => t (EventRequest s) -> Seq (s -> s)
|
||||
getUpdateUserStates reqs = foldl foldHelper Seq.empty reqs where
|
||||
getUpdateUserStates reqs = foldl' foldHelper Seq.empty reqs where
|
||||
foldHelper acc (UpdateUserState fn) = acc |> fn
|
||||
foldHelper acc _ = acc
|
||||
|
||||
|
@ -8,6 +8,7 @@ import Control.Monad
|
||||
import Control.Monad.Extra
|
||||
import Control.Monad.IO.Class
|
||||
import Control.Monad.State
|
||||
import Data.List (foldl')
|
||||
import Data.Maybe
|
||||
import Data.Sequence (Seq, (><))
|
||||
import Lens.Micro.Mtl
|
||||
@ -116,7 +117,7 @@ handleAppEvents mapp app events = do
|
||||
return newApp
|
||||
|
||||
reduceAppEvents :: AppEventHandler s e -> s -> Seq e -> (s, [IO (Maybe e)])
|
||||
reduceAppEvents appEventHandler app events = foldl reducer (app, []) events where
|
||||
reduceAppEvents appEventHandler app events = foldl' reducer (app, []) events where
|
||||
reducer (app, tasks) event = case appEventHandler app event of
|
||||
State newApp -> (newApp, tasks)
|
||||
StateEvent newApp newEvent -> reducer (newApp, tasks) newEvent
|
||||
|
@ -4,6 +4,7 @@ module Monomer.Widget.Widgets.Grid (empty, hgrid, vgrid) where
|
||||
|
||||
import Control.Monad
|
||||
import Data.Default
|
||||
import Data.List (foldl')
|
||||
import Data.Sequence ((|>))
|
||||
|
||||
import qualified Data.Sequence as Seq
|
||||
@ -55,7 +56,7 @@ makeFixedGrid isHorizontal = createContainer {
|
||||
newIndex = index + if _instanceVisible child then 1 else 0
|
||||
newViewport = if visible then calcViewport index else def
|
||||
newArea = (newViewport, newViewport)
|
||||
assignedAreas = fst $ foldl foldHelper (Seq.empty, 0) children
|
||||
assignedAreas = fst $ foldl' foldHelper (Seq.empty, 0) children
|
||||
calcViewport i = Rect (cx i) (cy i) cw ch
|
||||
cw = if cols > 0 then w / fromIntegral cols else 0
|
||||
ch = if rows > 0 then h / fromIntegral rows else 0
|
||||
|
@ -3,6 +3,7 @@
|
||||
module Monomer.Widget.Widgets.Stack (hstack, vstack) where
|
||||
|
||||
import Control.Monad
|
||||
import Data.List (foldl')
|
||||
import Data.Sequence ((<|))
|
||||
|
||||
import qualified Data.Sequence as Seq
|
||||
@ -56,7 +57,7 @@ makeStack isHorizontal = createContainer {
|
||||
remainderUnit = if remainderExist then max 0 remainderTotal / fromIntegral remainderCount else 0
|
||||
newViewports = Seq.reverse revViewports
|
||||
assignedArea = Seq.zip newViewports newViewports
|
||||
(revViewports, _) = foldl foldHelper (Seq.empty, mStart) childrenPairs
|
||||
(revViewports, _) = foldl' foldHelper (Seq.empty, mStart) childrenPairs
|
||||
foldHelper (accum, offset) childPair = (newSize <| accum, offset + rectSelector newSize) where
|
||||
newSize = resizeChild offset childPair
|
||||
resizeChild offset childPair = if not (_instanceVisible widgetInstance) then emptyRect else if isHorizontal then hRect else vRect where
|
||||
|
1
tasks.md
1
tasks.md
@ -47,6 +47,7 @@
|
||||
- + Rethink Tree.Path import
|
||||
- + Clean up Seq imports
|
||||
- Can we generalize _widgetFind?
|
||||
- What for?
|
||||
- Where can we use Seq? Does it make sense to use it everywhere? What about Traversable?
|
||||
- Reorganize Common Types. What do other projects do? They should be simple to import and use
|
||||
- Create composite widget, on which application itself is based
|
||||
|
Loading…
Reference in New Issue
Block a user