cmd :: B.ByteString -> Handle -> ReaderT Message (StateT GameState IO) ()

cmd "action" = \handle -> do
    message <- ask
    if length (mParts message) < 2
    then invalid handle
    else get >>= liftIO . runAction handle message >>= put
cmd :: B.ByteString -> Handle -> ReaderT Message (StateT GameState IO) ()
cmd "action" = \handle -> do
    message <- ask
    if length (mParts message) < 2
    then invalid handle
    else get >>= liftIO . runAction handle message >>= put
cmd "action" = \handle -> do
    message <- ask
    if length (mParts message) < 2
    then invalid handle
    else get >>= liftIO . runAction handle message >>= put