-- | -- Module: FRP.NetWire.Request -- Copyright: (c) 2011 Ertugrul Soeylemez -- License: BSD3 -- Maintainer: Ertugrul Soeylemez -- -- Unique identifiers. module FRP.NetWire.Request ( -- * Identifiers. identifier ) where import Control.Concurrent.STM import FRP.NetWire.Wire -- | Choose a unique identifier when switching in and keep it. identifier :: Wire a Int identifier = mkGen $ \ws _ -> do let reqVar = wsReqVar ws req <- atomically $ do req' <- readTVar reqVar let req = succ req' req `seq` writeTVar reqVar (succ req') return req' return (Just req, WConst req)