forbidden-fruit-0.1.0: src/Control/Imperative/Var.hs
-----------------------------------------------------------
-- |
-- Module : Control.Imperative.Var
-- Copyright : (C) 2015, Yu Fukuzawa
-- License : BSD3
-- Maintainer : minpou.primer@email.com
-- Stability : experimental
-- Portability : portable
--
-----------------------------------------------------------
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
module Control.Imperative.Var
( MonadVar
, var
) where
import Control.Imperative.Internal
import Control.Imperative.Var.Class
import Control.Monad.Base
-- | Useful constraint synonym for variable operation.
type MonadVar m = (MonadBase (BaseEff m) m, MVar (BaseEff m))
-- | Create a new mutable variable.
var :: MonadVar m => a -> m (Ref (BaseEff m) a)
var x = do
v <- liftBase $ newVar x
return Ref
{ get = readVar v
, set = writeVar v
}
{-# INLINE var #-}