-- iinitialize state with floor number and list of floor item sets
initState :: Int -> [ItemSet] -> State
initState f = State f . foldl xor 0 .
    zipWith (\i v -> v `unsafeShiftL` (i * stateFloorSize)) [0..]
initState :: Int -> [ItemSet] -> State
initState f = State f . foldl xor 0 .
    zipWith (\i v -> v `unsafeShiftL` (i * stateFloorSize)) [0..]
initState f = State f . foldl xor 0 .
    zipWith (\i v -> v `unsafeShiftL` (i * stateFloorSize)) [0..]