9856641ef1
I had been using -ignore-package monads-tf to deal with this, but the XMPP library uses monads-tf, so that also ignores it. Instead, use PackageImports to force use of mtl in my own code.
28 lines
698 B
Haskell
28 lines
698 B
Haskell
{- state monad support
|
|
-
|
|
- Copyright 2012 Joey Hess <joey@kitenet.net>
|
|
-
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
-}
|
|
|
|
{-# LANGUAGE PackageImports #-}
|
|
|
|
module Utility.State where
|
|
|
|
import "mtl" Control.Monad.State.Strict
|
|
|
|
{- Modifies Control.Monad.State's state, forcing a strict update.
|
|
- This avoids building thunks in the state and leaking.
|
|
- Why it's not the default, I don't know.
|
|
-
|
|
- Example: changeState $ \s -> s { foo = bar }
|
|
-}
|
|
changeState :: MonadState s m => (s -> s) -> m ()
|
|
changeState f = do
|
|
x <- get
|
|
put $! f x
|
|
|
|
{- Gets a value from the internal state, selected by the passed value
|
|
- constructor. -}
|
|
getState :: MonadState s m => (s -> a) -> m a
|
|
getState = gets
|