MultiDimensionalArrayLiterals.java
package com.acme.arrays;

import church.lang.Array;
import church.lang.Array.$WriteElementsToStream;
import church.lang.Array.$WriteEmbracedElementsToStream;
import church.lang.ByteStream;
import church.lang.operators.Relational.$$equal;
import church.lang.operators.Streams.$$encode;
import church.primitives.Integers;
import church.primitives.Objects;

import static church.lang.Array.array;
import static church.lang.operators.Streams.output;

@SuppressWarnings("unchecked")
public class MultiDimensionalArrayLiterals {
    private static final $$encode<ByteStream, String>                                          $S0  = Objects::$encode;
    private static final $$encode<ByteStream, Integer>                                         $S1  = Integers::$encode;
    private static final $WriteElementsToStream<ByteStream, Integer>                           $S2  = Array.writeElementsToStream($S1, $S0);
    private static final $WriteEmbracedElementsToStream<ByteStream, Integer, String, String>   $S3  = Array.writeEmbracedElementsToStream($S0, $S2, $S0);
    private static final $$encode<ByteStream, Integer[]>                                       $S4  = Array.$encode($S3);
    private static final $WriteElementsToStream<ByteStream, Integer[]>                         $S5  = Array.writeElementsToStream($S4, $S0);
    private static final $WriteEmbracedElementsToStream<ByteStream, Integer[], String, String> $S6  = Array.writeEmbracedElementsToStream($S0, $S5, $S0);
    private static final $$encode<ByteStream, Integer[][]>                                     $S7  = Array.$encode($S6);
    private static final $$equal<Integer>                                                      $S8  = Integers::$equal;
    private static final $$equal<Integer[]>                                                    $S9  = Array.$equal($S8);
    private static final $$equal<Integer[][]>                                                  $S10 = Array.$equal($S9);

    public static void main(String[] args) {
        Integer[]   a1  = array(1, 2);
        Integer[]   a2  = array(3, 4);
        Integer[][] aa1 = array(a1, a2);
        Integer[][] aa2 = array(array(1, 2), array(3, 4));
        $S0.$encode($S7.$encode(output, aa1), "\n");
        assert $S10.$equal(aa1, aa2);
    }

}