Nomyx-0.0.1: src/Utils.hs
-----------------------------------------------------------------------------
--
-- Module : Utils
-- Copyright :
-- License : AllRightsReserved
--
-- Maintainer :
-- Stability :
-- Portability :
--
-- |
--
-----------------------------------------------------------------------------
module Utils where
import Data.Maybe
import Data.Char
import Control.Monad.State
-- | this function will return just a if it can cast it to an a.
maybeRead :: Read a => String -> Maybe a
maybeRead = fmap fst . listToMaybe . reads
-- | Replaces all instances of a value in a list by another value.
replace :: Eq a => a -- ^ Value to search
-> a -- ^ Value to replace it with
-> [a] -- ^ Input list
-> [a] -- ^ Output list
replace x y = map (\z -> if z == x then y else z)
-- | Replaces all instances of a value in a list by another value.
replaceWith :: (a -> Bool) -- ^ Value to search
-> a -- ^ Value to replace it with
-> [a] -- ^ Input list
-> [a] -- ^ Output list
replaceWith f y = map (\z -> if f z then y else z)
yes = ["o", "oui", "y", "yes", "v", "vrai", "true"]
toLowerS = map toLower
isYes a = toLowerS a `elem` yes
-- | generic function to say things on transformers like GameState, ServerState etc.
say :: String -> StateT a IO ()
say = lift . putStrLn
liftT :: Show s => State s a -> StateT s IO a
liftT st = do
s1 <- get
let (a, s) = runState st s1
--lift $ putStrLn $ "putting " ++ show s
put s
return a