dubst_member :: Item -> DUTree s -> ST s Bool
dubst_member x t =
    case t of
    DUEmpty ->
        return False
    (DUNode lp n rp) ->
        if x == n then
            return True
        else if x <= n then
            do
            l <- readSTRef lp
            dubst_member x l
        else
            do
            r <- readSTRef rp
            dubst_member x r
dubst_member :: Item -> DUTree s -> ST s Bool
dubst_member x t =
    case t of
    DUEmpty ->
        return False
    (DUNode lp n rp) ->
        if x == n then
            return True
        else if x <= n then
            do
            l <- readSTRef lp
            dubst_member x l
        else
            do
            r <- readSTRef rp
            dubst_member x r
dubst_member x t =
    case t of
    DUEmpty ->
        return False
    (DUNode lp n rp) ->
        if x == n then
            return True
        else if x <= n then
            do
            l <- readSTRef lp
            dubst_member x l
        else
            do
            r <- readSTRef rp
            dubst_member x r