- code clean-up -- naming. pass the curr state. ret the next state. etc.
- rename to  "be-generust" "be_generust::giver"

- better error messages
- error messages when encountering unsupported stuff (?)

item def in rust... like struct and functions...
are such things supported? not in V1.

Maker::make_giver(...)
give!(foo) --> if false { vec!(1) }
give_out!(iter) --> for x in xs { give!(x) }

- support more expressions
- support (infinite) loops
- support for loops
- support if conditions
- support else conditions
- support whie loops

- parameters support
- range
- map
- filter
- hamming number stream
- chain
- zip
- skip (while), take (while), flatten, flat_map
- merge sort (merge and sort)
- BFS and DFS on trees
- map on maps! keys, values, key value pairs

- benchmarks
- size hint
- count?, last? nth?

- break
- continue

- if let
- match
- try

- local variable support
- how to drop at the right time...



    for param in func.sig.generics.type_params() {
        if !param.bounds.is_empty() {
            return fail(&param.bounds, "type bounds must be set in the where clause");
        }
    }

    for lifetime_def in func.sig.generics.lifetimes() {
        return fail(&lifetime_def, "lifetime parameters are not supported (yet)");
    }

    for param in func.sig.generics.const_params() {
        return fail(&param, "constant parameters are not supported (yet)");
    }

    P0_param
L0_local_var
