]> gitweb.factorcode.org Git - factor.git/commitdiff
fixed point signals
authorSam Anklesaria <sam@Tintin.local>
Mon, 22 Jun 2009 02:08:24 +0000 (21:08 -0500)
committerSam Anklesaria <sam@Tintin.local>
Mon, 22 Jun 2009 02:08:24 +0000 (21:08 -0500)
extra/ui/frp/signals/signals.factor

index 4db526dbb3426c8ce04227f033b979a4599675b2..24bf2b414848ed3986db4e2c748c546e99492c57 100644 (file)
@@ -77,7 +77,8 @@ M: mapped-model (model-changed)
     set-model ;
 
 TUPLE: side-effect-model < mapped-model ;
-M: side-effect-model (model-changed) [ [ value>> ] [ quot>> ] bi* call( old -- ) ] keep t swap set-model ;
+M: side-effect-model (model-changed) [ value>> ] dip [ quot>> call( old -- ) ] 2keep set-model ;
+
 : $> ( model quot -- signal ) side-effect-model new-mapped-model ;
 
 TUPLE: quot-model < mapped-model ;
@@ -115,5 +116,11 @@ M: model fmap <mapped> ;
 USE: ui.frp.functors
 FMAPS: $> <$ fmap FOR & | product ;
 
+! for side effects
+TUPLE: (frp-when) < multi-model quot cond ;
+: frp-when ( model quot cond -- model ) rot 1array (frp-when) <multi-model> swap >>cond swap >>quot ;
+M: (frp-when) (model-changed) [ quot>> ] 2keep
+    [ value>> ] [ cond>> ] bi* call( a -- ? ) [ call( model -- ) ] [ 2drop ] if ;
+
 ! only used in construction
 : with-self ( quot: ( model -- model ) -- model ) [ f <basic> dup ] dip call swap [ add-dependency ] keep ; inline
\ No newline at end of file