clean_cli is in programm command line parser using for repl.

Example

```rust let cli = Cli::<()>::builder() .command(CommandBuilder::withname("cmd") .usevalue(ArgType::Bool) .parameter(Parameter::withname("bool") .valuetype(ArgType::Bool) .alias("b") .alias("bb") ) .parameter(Parameter::withname("int") .valuetype(ArgType::Int) .alias("i") .alias("ii") ) .parameter(Parameter::withname("float") .valuetype(ArgType::Float) .alias("f") .alias("ff") ) .parameter(Parameter::withname("string") .valuetype(ArgType::String) .alias("s") .alias("ss") ) .handler(|ctx| { let mut expectparams = HashSet::new(); expectparams.insert("bool"); expectparams.insert("int"); expectparams.insert("float"); expectparams.insert("string"); expectparams.insert("value");

            if let Some(arg) = &ctx.units.last().unwrap().value() {
                if let ArgValue::Bool(v) = arg {
                    assert!(!*v);
                    expect_params.remove("value");
                }
            } 

            if let Some((param, arg)) = &ctx.units.last().unwrap().parameters.get("bool") {
                assert_eq!("bool", param.name.as_str());
                if let ArgValue::Bool(v) = arg {
                    assert!(*v);
                    expect_params.remove("bool");
                }
            } 

            if let Some((param, arg)) = &ctx.units.last().unwrap().parameters.get("int") {
                assert_eq!("int", param.name.as_str());
                if let ArgValue::Int(v) = arg {
                    assert_eq!(*v, 42_i64);
                    expect_params.remove("int");
                }
            }

            if let Some((param, arg)) = &ctx.units.last().unwrap().parameters.get("float") {
                assert_eq!("float", param.name.as_str());
                if let ArgValue::Float(v) = arg {
                    assert_eq!(*v, 4.2_f64);
                    expect_params.remove("float");
                }
            }

            if let Some((param, arg)) = &ctx.units.last().unwrap().parameters.get("string") {
                assert_eq!("string", param.name.as_str());
                if let ArgValue::String(v) = arg {
                    assert_eq!(*v, "bla");
                    expect_params.remove("string");
                }
            }

            if !expect_params.is_empty() {
                panic!("parameters not found: {:?}", expect_params)
            };
        })
    )
    .build();

match cli.exec_line("cmd false --bool --int 42 --float 4.2 --string bla") {
    Ok(_) => {}
    Err(err) => panic!("{:?}", err)
}

```

Send all questions and wishes to bugrazoid@yandex.ru