aboutsummaryrefslogtreecommitdiffstats
path: root/XMonad/Util/ExtensibleState.hs
diff options
context:
space:
mode:
Diffstat (limited to 'XMonad/Util/ExtensibleState.hs')
-rw-r--r--XMonad/Util/ExtensibleState.hs13
1 files changed, 6 insertions, 7 deletions
diff --git a/XMonad/Util/ExtensibleState.hs b/XMonad/Util/ExtensibleState.hs
index 0ac05d6..331dd4b 100644
--- a/XMonad/Util/ExtensibleState.hs
+++ b/XMonad/Util/ExtensibleState.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE PatternGuards #-}
-----------------------------------------------------------------------------
-- |
-- Module : XMonad.Util.ExtensibleState
@@ -26,6 +27,7 @@ import Data.Typeable (typeOf,Typeable,cast)
import qualified Data.Map as M
import XMonad.Core
import qualified Control.Monad.State as State
+import Data.Maybe (fromMaybe)
-- ---------------------------------------------------------------------
-- $usage
@@ -96,13 +98,10 @@ get = getState' undefined -- `trick' to avoid needing -XScopedTypeVariables
case v of
Just (Right (StateExtension val)) -> return $ toValue val
Just (Right (PersistentExtension val)) -> return $ toValue val
- Just (Left str) -> case extensionType (undefined `asTypeOf` k) of
- PersistentExtension x -> do
- let val = maybe initialValue id $
- cast =<< safeRead str `asTypeOf` (Just x)
- put (val `asTypeOf` k)
- return val
- _ -> return $ initialValue
+ Just (Left str) | PersistentExtension x <- extensionType k -> do
+ let val = fromMaybe initialValue $ cast =<< safeRead str `asTypeOf` Just x
+ put (val `asTypeOf` k)
+ return val
_ -> return $ initialValue
safeRead str = case reads str of
[(x,"")] -> Just x