#+begin_src cfengine3
bundle agent __main__
{
  vars:
      "s_one"   string => "one";
      "ITwo"    int => "2";
      "rThree"  real => "3.0";

      "lMyList" slist => { "$(s_one)", "$(ITwo)", "$(rThree)" };

  methods:
      "Iteration inside (bundle called once)"
        usebundle => dollar_vs_at( @(lMyList) );

      "Iteration outside (bundle called length(lMyList) times)"
        usebundle => dollar_vs_at( $(lMyList) );
}

bundle agent dollar_vs_at( myParam )
{
  vars:
    "myParamType" string => type( myParam );

   classes:
    "myParamType_slist" expression => strcmp( $(myParamType),  "slist" );
    "myParamType_string" expression => strcmp( $(myParamType),  "string" );

  reports:
      "Bundle promised by '$(with)'"
        with => nth( reverse( callstack_promisers() ), 0 );

    myParamType_slist::
      "myParam is of type '$(myParamType)' with value $(with)"
        with => join( ", ", @(myParam) );

    myParamType_string::
      "myParam is of type '$(myParamType)' with value $(myParam)";

}
#+end_src cfengine3

#+begin_src example_output
#@ ```
#@ R: Bundle promised by 'Iteration inside (bundle called once)'
#@ R: myParam is of type 'slist' with value one, 2, 3.000000
#@ R: Bundle promised by 'Iteration outside (bundle called length(lMyList) times)'
#@ R: myParam is of type 'string' with value one
#@ R: myParam is of type 'string' with value 2
#@ R: myParam is of type 'string' with value 3.000000
#@ ```
#+end_src

