main

Where

Let main args.
    Let MAP.
        (SEARCH.MAP Z.compare
            Func {key _}. key)
    In
    Let G. (GRAPH.G MAP)
    Let g.
        (LIST.reduce
            [
                {0 [3 1]}
                {1 [2 0 5]}
                {2 [3]}
                {3 [2 4]}
            ]
            MAP.empty
            MAP.insert)
    In
    (LIST.for_each (G.strongly_connected_components g)
        Func c. (STDIO.print_line $ STRING.join " " $ LIST.map c Z.show))

Where

Let GRAPH. Package "graph"
Let LIST. Package "list"
Let SEARCH. Package "search"
Let STDIO. Package "stdio"
Let STRING. Package "string"
Let Z. Package "z"