hnix-0.16.0: src/Nix/Value/Monad.hs
module Nix.Value.Monad where
-- * @MonadValue@ - a main implementation class
class MonadValue v m where
-- | Wrap value into a thunk.
defer :: m v -> m v
-- | Force the evaluation of the value.
demand :: v -> m v
-- | If 'v' is a thunk, 'inform' allows us to modify the action to be
-- performed by the thunk, perhaps by enriching it with scope info, for
-- example.
inform :: v -> m v
-- * @MonadValueF@ - a Kleisli-able customization class
class MonadValueF v m where
demandF :: (v -> m r) -> v -> m r
informF :: (m v -> m v) -> v -> m v