public void Run()
        {
            int __ruleIndex = 0;

            __res          = new __MetaCnvResult <List <a> >();
            __res.Value    = default(List <a>);
            __res.HasValue = false;

            switch (__ruleIndex)
            {
            case 0:
            {
                List <a> ys = default(List <a>);
                if (!(__arg0 is nil <a>))
                {
                    goto case 1;
                }
                ys             = __arg1;
                __res.HasValue = true;
                __res.Value    = ys;
                break;
            }

            case 1:
            {
                a        x  = default(a);
                List <a> xs = default(List <a>);
                List <a> ys = default(List <a>);
                List <a> zs = default(List <a>);
                if (!(__arg0 is __opColon__opColon <a>))
                {
                    goto default;
                }
                __opColon__opColon <a> __tmp0 = (__opColon__opColon <a>)__arg0;
                x  = __tmp0.__arg0;
                xs = __tmp0.__arg1;
                ys = __arg1;
                append <a> __tmp1 = new append <a>();
                __tmp1.__arg0 = xs;
                __tmp1.__arg1 = ys;
                __tmp1.Run();
                if (!(__tmp1.__res.HasValue))
                {
                    goto default;
                }
                __MetaCnvResult <List <a> > __tmp2 = __tmp1.__res;
                zs = __tmp2.Value;
                __opColon__opColon <a> __tmp3 = new __opColon__opColon <a>();
                __tmp3.__arg0  = x;
                __tmp3.__arg1  = zs;
                __res.HasValue = true;
                __res.Value    = __tmp3;
                break;
            }

            default: break;
            }
        }
        public void Run()
        {
            int __ruleIndex = 0;

            __res          = new __MetaCnvResult <int>();
            __res.Value    = default(int);
            __res.HasValue = false;
            switch (__ruleIndex)
            {
            case 0:
            {
                if (!(__arg0 is nil <a>))
                {
                    goto case 1;
                }

                nil <a> __tmp0 = (nil <a>)__arg0;
                __res.Value    = 0;
                __res.HasValue = true;
                break;
            }

            case 1:
            {
                a        x  = default(a);
                List <a> xs = default(List <a>);
                int      y  = default(int);

                if (!(__arg0 is __opColon__opColon <a>))
                {
                    goto default;
                }

                __opColon__opColon <a> __tmp0 = (__opColon__opColon <a>)__arg0;
                x  = __tmp0.__arg0;
                xs = __tmp0.__arg1;
                length <a> __tmp2 = new length <a>();
                __tmp2.__arg0 = xs;
                __tmp2.Run();

                if (!__tmp2.__res.HasValue)
                {
                    goto default;
                }

                __MetaCnvResult <int> __tmp3 = __tmp2.__res;
                y = __tmp3.Value;
                __res.HasValue = true;
                __res.Value    = 1 + y;
                break;
            }

            default: break;
            }
        }