
Dear all, I am thinking of having creatures like lam(x)(x + 2) in my code which would be the Haskell equivalent for \x -> x + 2. In fact, I am working in an untyped world (with very limited functionality) and my typical lambda expressions would only include (function) applications, (lambda) abstractions, and let-bindings. It is exactly for the existence of let-bindings that I guess I can't resort to placeholders like: template<int> placeholder; const terminal<placeholder<0> >::type _1 = {{}}; const terminal<placeholder<1> >::type _2 = {{}}; const terminal<placeholder<2> >::type _3 = {{}}; ... The point is that I need to store what each variable is bound to. And, AFAIK, I can't store such information in std::map<> for _1 has a different type than _2 for example. So, the two hopes that I have in Proto for solving this problem are: 1) To provide a type T instances of which can act like untyped variables in accepting values of different C++ types. T should also be storable in a map-like container. Boost.Any comes to mind for the first requirement but the problem is that there is no meaningful operator < or operator == to use map or unordered_map for boost::any objects. Note that a1 != a2 needs to the case only when a1 and a2 are distinct variables. Can proto::_ be of any help here? 2) To provide a map-like container in which I can store things like boost::any objects. OK, maybe this is not for Proto to address but though it might still have something to offer... TIA, --Hossein