whenWVarIsUpdating :: Q.Arbitrary v =>
    (IO (v, WV.WVar v) -> HS.Spec) -> HS.Spec
whenWVarIsUpdating f = HS.describe "when WVar is updating" $ f prepare
  where
    prepare = do
        val <- Q.generate Q.arbitrary
        wv  <- WV.newWVar val
        M.void $ WV.takeWVar wv
        return (val, wv)
whenWVarIsUpdating :: Q.Arbitrary v =>
    (IO (v, WV.WVar v) -> HS.Spec) -> HS.Spec
whenWVarIsUpdating f = HS.describe "when WVar is updating" $ f prepare
  where
    prepare = do
        val <- Q.generate Q.arbitrary
        wv  <- WV.newWVar val
        M.void $ WV.takeWVar wv
        return (val, wv)
whenWVarIsUpdating f = HS.describe "when WVar is updating" $ f prepare
  where
    prepare = do
        val <- Q.generate Q.arbitrary
        wv  <- WV.newWVar val
        M.void $ WV.takeWVar wv
        return (val, wv)