https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/runtime_control.html#rts-options-to-control-the-garbage-collector

-A ⟨size⟩
    Default:	1MB
    
    Set the allocation area size used by the garbage collector. The allocation area (actually
    generation 0 step 0) is fixed and is never resized (unless you use -H [⟨size⟩], below).

    Increasing the allocation area size may or may not give better performance (a bigger allocation
    area means worse cache behaviour but fewer garbage collections and less promotion).

    With only 1 generation (e.g. -G1, see -G ⟨generations⟩) the -A option specifies the minimum
    allocation area, since the actual size of the allocation area will be resized according to the
    amount of data in the heap (see -F ⟨factor⟩, below).

-M ⟨size⟩
    Default:	unlimited
    Set the maximum heap size to ⟨size⟩ bytes. The heap normally grows and shrinks according to the
    memory requirements of the program. The only reason for having this option is to stop the heap
    growing without bound and filling up all the available swap space, which at the least will
    result in the program being summarily killed by the operating system.

    The maximum heap size also affects other garbage collection parameters: when the amount of live
    data in the heap exceeds a certain fraction of the maximum heap size, compacting collection will
    be automatically enabled for the oldest generation, and the -F parameter will be reduced in
    order to avoid exceeding the maximum heap size.