Change signature of forceEff

This commit is contained in:
John Wiegley 2019-03-15 12:49:16 -07:00
parent 14b2b9a66d
commit 85f32da4a4
No known key found for this signature in database
GPG key ID: C144D8F4F19FE630
3 changed files with 10 additions and 5 deletions

View file

@ -33,7 +33,8 @@ normalForm'
(Framed e m,
MonadThunk t m (NValue t f m),
MonadDataErrorContext t f m)
=> (forall r. t -> (NValue t f m -> m r) -> m r) -> NValue t f m
=> (forall r. t -> (NValue t f m -> m r) -> m r)
-> NValue t f m
-> m (NValueNF t f m)
normalForm' f = run . nValueToNFM run go
where
@ -77,7 +78,11 @@ normalForm_ :: (Framed e m,
MonadThunk t m (NValue t f m),
MonadDataErrorContext t f m)
=> NValue t f m -> m ()
normalForm_ = void . normalForm' forceEff
normalForm_ = fmap void $ normalForm' $ \t k -> do
forceEff t (void . k)
-- This next return is safe, only because we never inspect this value, nor
-- is anything returned to the user due to 'fmap void' above.
return $ error "normalForm_: a value was expected"
removeEffects :: (MonadThunk t m (NValue t f m), MonadDataContext f m)
=> NValue t f m -> NValueNF t f m

View file

@ -14,7 +14,7 @@ class Monad m => MonadThunk t m v | t -> m, t -> v where
query :: t -> r -> (v -> r) -> r
queryM :: t -> m r -> (v -> m r) -> m r
force :: t -> (v -> m r) -> m r
forceEff :: t -> (v -> m r) -> m r
forceEff :: t -> (v -> m ()) -> m ()
wrapValue :: v -> t
getValue :: t -> Maybe v

View file

@ -105,12 +105,12 @@ forceThunk (Thunk n active ref) k = do
writeVar ref (Computed v)
k v
forceEffects :: MonadVar m => NThunkF m v -> (v -> m a) -> m a
forceEffects :: MonadVar m => NThunkF m v -> (v -> m ()) -> m ()
forceEffects (Value v) k = k v
forceEffects (Thunk _ active ref) k = do
nowActive <- atomicModifyVar active (True,)
if nowActive
then return $ error "forceEffects: a value was expected"
then return ()
else do
eres <- readVar ref
case eres of