2626 Monoid \Concat ,
2727};
2828
29- final class UnixProcesses implements Processes
29+ final class Unix implements Processes
3030{
31- private Clock $ clock ;
32- private Control \Processes $ processes ;
33-
34- private function __construct (Clock $ clock , Control \Processes $ processes )
35- {
36- $ this ->clock = $ clock ;
37- $ this ->processes = $ processes ;
31+ private function __construct (
32+ private Clock $ clock ,
33+ private Control \Processes $ processes ,
34+ ) {
3835 }
3936
4037 /**
@@ -54,10 +51,9 @@ public function all(): Set
5451 ->withShortOption ('eo ' , $ this ->format ()),
5552 )
5653 ->map ($ this ->parse (...))
57- ->match (
58- static fn ($ processes ) => $ processes ,
59- static fn () => Set::of (),
60- );
54+ ->toSequence ()
55+ ->toSet ()
56+ ->flatMap (static fn ($ processes ) => $ processes );
6157 }
6258
6359 #[\Override]
@@ -140,26 +136,17 @@ private function parse(Str $output): Set
140136 ->get (4 )
141137 ->keep (Is::string ()->nonEmpty ()->asPredicate ())
142138 ->map (Command::of (...));
139+ $ start = Maybe::just (
140+ $ this ->clock ->at ($ start , Format::of ('D M j H:i:s Y ' )),
141+ );
143142
144- return Maybe::all ($ user , $ pid , $ percentage , $ memory , $ command )
145- ->map (fn (User $ user , Pid $ pid , Percentage $ percentage , Memory $ memory , Command $ command ) => Process::of (
146- $ pid ,
147- $ user ,
148- $ percentage ,
149- $ memory ,
150- $ this ->clock ->at ($ start , Format::of ('D M j H:i:s Y ' )),
151- $ command ,
152- ));
143+ return Maybe::all ($ pid , $ user , $ percentage , $ memory , $ start , $ command )
144+ ->map (Process::of (...));
153145 });
154146
155- /** @var Set<Process> */
156- return $ processes ->reduce (
157- Set::of (),
158- static fn (Set $ processes , Maybe $ process ): Set => $ process ->match (
159- static fn (Process $ process ) => ($ processes )($ process ),
160- static fn () => $ processes ,
161- ),
162- );
147+ return $ processes
148+ ->flatMap (static fn ($ process ) => $ process ->toSequence ()) // discard process that failed to be parsed
149+ ->toSet ();
163150 }
164151
165152 private function format (): string
0 commit comments