From 9dc3d316e89770ddb9cf620ba95b2db8a8997aba Mon Sep 17 00:00:00 2001 From: Daniel Schoepe Date: Sat, 7 Nov 2009 11:38:32 +0100 Subject: Store deserialized data after reading in X.U.ExtensibleState Ignore-this: 192beca56e9437292bd3f16451ae9e66 darcs-hash:20091107103832-7f603-c018a51111ff17ac621a531d17d616b895c2e2b2.gz --- XMonad/Util/ExtensibleState.hs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'XMonad/Util') diff --git a/XMonad/Util/ExtensibleState.hs b/XMonad/Util/ExtensibleState.hs index caae704..43da23b 100644 --- a/XMonad/Util/ExtensibleState.hs +++ b/XMonad/Util/ExtensibleState.hs @@ -92,14 +92,17 @@ getState = getState' undefined -- `trick' to avoid needing -XScopedTypeVariables getState' :: ExtensionClass a => a -> X a getState' k = do v <- gets $ M.lookup (show . typeOf $ k) . extensibleState - return $ case v of - Just (Right (StateExtension val)) -> toValue val - Just (Right (PersistentExtension val)) -> toValue val - Just (Left str) -> case extensionType (undefined `asTypeOf` k) of - PersistentExtension x -> maybe initialValue id $ - cast =<< safeRead str `asTypeOf` (Just x) - _ -> initialValue - _ -> initialValue + 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) + putState (val `asTypeOf` k) + return val + _ -> return $ initialValue + _ -> return $ initialValue safeRead str = case reads str of [(x,"")] -> Just x _ -> Nothing -- cgit v1.2.3