mapM' f (x:xs) = unsafeInterleaveIO $ do
    y <- f x
    ys <- mapM' f xs
    return (y : ys)
mapM' f (x:xs) = unsafeInterleaveIO $ do
    y <- f x
    ys <- mapM' f xs
    return (y : ys)
mapM' f (x:xs) = unsafeInterleaveIO $ do
    y <- f x
    ys <- mapM' f xs
    return (y : ys)