-- | -- Copyright : (C) Keera Studios Ltd, 2013 -- License : BSD3 -- Maintainer : support@keera.co.uk -- -- MVars as Reactive Values. -- -- CBMVars are MVars enriched with a notion of callbacks that are -- executed when the value in the MVar is altered. -- -- This module wraps CBMVars into reactive values, making it easy -- to use them as models of reactive applications. module Data.CBMVar.Reactive where import Data.CBMVar (CBMVar, installCallbackCBMVar, readCBMVar, writeCBMVar) import Data.ReactiveValue (ReactiveFieldRead(..), ReactiveFieldReadWrite(..)) -- | Return a read-only reactive value wrapping a CBMVar. cbmvarReactiveRO :: CBMVar a -> ReactiveFieldRead IO a cbmvarReactiveRO mvar = ReactiveFieldRead getter notifier where getter = readCBMVar mvar notifier n = installCallbackCBMVar mvar n -- | Return a read-write reactive value wrapping a CBMVar. cbmvarReactiveRW :: CBMVar a -> ReactiveFieldReadWrite IO a cbmvarReactiveRW mvar = ReactiveFieldReadWrite setter getter notifier where setter = writeCBMVar mvar getter = readCBMVar mvar notifier n = installCallbackCBMVar mvar n