module Game.Utility where
import qualified System.Random as Rnd
import qualified Control.Monad.Trans.State as MS
import Control.Monad (liftM, )
import qualified Data.NonEmpty.Set as NonEmptySet
import qualified Data.NonEmpty as NonEmpty
readMaybe :: (Read a) => String -> Maybe a
readMaybe str =
case reads str of
[(a,"")] -> Just a
_ -> Nothing
nullToMaybe :: [a] -> Maybe [a]
nullToMaybe [] = Nothing
nullToMaybe s = Just s
randomSelect :: (Rnd.RandomGen g, Monad m) => [a] -> MS.StateT g m a
randomSelect items =
liftM (items!!) $ MS.StateT $ return . Rnd.randomR (0, length items-1)
nonEmptySetToList :: NonEmptySet.T a -> [a]
nonEmptySetToList = NonEmpty.flatten . NonEmptySet.toAscList