let filter_option list =
    let rec do_filter rlist = function
        | [] -> List.rev rlist
        | None::tl -> do_filter rlist tl
        | (Some(v))::tl -> do_filter (v::rlist) tl in
    do_filter [] list