@@ -495,6 +495,15 @@ module IORef where
495495 \ };\
496496 \}" :: forall s r. IORef s -> Eff (ref :: Ref | r) s
497497
498+
499+ foreign import modifyIORef "function modifyIORef(ref) {\
500+ \ return function(f) {\
501+ \ return function() {\
502+ \ ref.value = f(ref.value);\
503+ \ };\
504+ \ };\
505+ \}" :: forall s r. IORef s -> (s -> s) -> Eff (ref :: Ref | r) {}
506+
498507 foreign import writeIORef "function writeIORef(ref) {\
499508 \ return function(val) {\
500509 \ return function() {\
@@ -540,14 +549,22 @@ module ST where
540549 \ };\
541550 \}" :: forall a h r. STRef h a -> Eff (st :: ST h | r) a
542551
543− foreign import modifySTRef "function modifySTRef(f) {\
544− \ return function(ref) {\
552+ foreign import modifySTRef "function modifySTRef(ref) {\
553+ \ return function(f) {\
545554 \ return function() {\
546555 \ ref.value = f(ref.value);\
547556 \ };\
548557 \ };\
549− \}" :: forall a h r. (a -> a) -> STRef h a -> Eff (st :: ST h | r) {}
558+ \}" :: forall a h r. STRef h a -> (a -> a) -> Eff (st :: ST h | r) {}
550559
560+ foreign import writeSTRef "function writeSTRef(ref) {\
561+ \ return function(a) {\
562+ \ return function() {\
563+ \ ref.value = a;\
564+ \ };\
565+ \ };\
566+ \}" :: forall a h r. STRef h a -> a -> Eff (st :: ST h | r) {}
567+
551568 foreign import runST "function runST(f) {\
552569 \ return f;\
553570 \}" :: forall a r. (forall h. Eff (st :: ST h | r) a) -> Eff r a