proc main()
{
    var a = ['a':'z'].reshape(2,3,4);
    var b = ['A':'Z'].reshape(2,3,4);
    var c34 = ['A':'Z'].reshape(3,4);
    var c24 = ['A':'Z'].reshape(2,4);
    var c23 = ['A':'Z'].reshape(2,3);
    "Array lamination\n";
    "a.laminate(b):\n", a.laminate(b), '\n';
    "a.laminate(b,0):\n", a.laminate(b,0), '\n';
    "a.laminate(b,1):\n", a.laminate(b,1), '\n';
    "a.laminate(b,2):\n", a.laminate(b,2), '\n';
    "a.laminate(b,-0.5):\n", a.laminate(b,-0.5), '\n';
    "a.laminate(b,0.5):\n", a.laminate(b,0.5), '\n';
    "a.laminate(b,1.5):\n", a.laminate(b,1.5), '\n';
    "a.laminate(b,2.5):\n", a.laminate(b,2.5), '\n';

    "\nSubarray lamination\n";
    "a.laminate(c34,0):\n", a.laminate(c34,0), '\n';
    "a.laminate(c24,1):\n", a.laminate(c24,1), '\n';
    "a.laminate(c23,2):\n", a.laminate(c23,2), '\n';
    "c34.laminate(a,0):\n", c34.laminate(a,0), '\n';
    "c24.laminate(a,1):\n", c24.laminate(a,1), '\n';
    "c23.laminate(a,2):\n", c23.laminate(a,2), '\n';

    "\nScalar left lamination\n";
    "'*'.laminate(b):\n", '*'.laminate(b), '\n';
    "'*'.laminate(b,0):\n", '*'.laminate(b,0), '\n';
    "'*'.laminate(b,1):\n", '*'.laminate(b,1), '\n';
    "'*'.laminate(b,2):\n", '*'.laminate(b,2), '\n';
    "'*'.laminate(b,-0.5):\n", '*'.laminate(b,-0.5), '\n';
    "'*'.laminate(b,0.5):\n", '*'.laminate(b,0.5), '\n';
    "'*'.laminate(b,1.5):\n", '*'.laminate(b,1.5), '\n';
    "'*'.laminate(b,2.5):\n", '*'.laminate(b,2.5), '\n';

    "\nScalar right lamination\n";
    "a.laminate('*'):\n", a.laminate('*'), '\n';
    "a.laminate('*',0):\n", a.laminate('*',0), '\n';
    "a.laminate('*',1):\n", a.laminate('*',1), '\n';
    "a.laminate('*',2):\n", a.laminate('*',2), '\n';
    "a.laminate('*',-0.5):\n", a.laminate('*',-0.5), '\n';
    "a.laminate('*',0.5):\n", a.laminate('*',0.5), '\n';
    "a.laminate('*',1.5):\n", a.laminate('*',1.5), '\n';
    "a.laminate('*',2.5):\n", a.laminate('*',2.5), '\n';
}