anchor.diff:  direction_to_heading(neg_y) -> {0, -1, 0};
   direction_to_heading(pos_z) -> {0, 0, 1};
   direction_to_heading(neg_z) -> {0, 0, -1}.
  -
  -
  --spec random_direction() -> direction().
  -random_direction() ->
  -    Dirs = [pos_x, neg_x, pos_y, neg_y, pos_z, neg_z],
  -    Idx = random:uniform(length(Dirs)),
  -    lists:nth(Idx, Dirs).
   
   %% displaying agents
   
  
positive.code: -type cell() :: {cell_state()}.
  -type direction() :: pos_x | neg_x | pos_y | neg_y | pos_z | neg_z.
  -type langton_rule() :: [direction()].
  -type langton_agent_state() :: {{langton_rule(), direction(), langton_rule()},
                                  cell()}.
  -type agent_state() :: parallant:agent_state(langton_agent_state()).
  -type move() :: {0, 1, 0} | {1, 0, 0} | {0, -1, 0} |
                  {-1, 0, 0} | {0, 0, 1} | {0, 0, -1}.
  
negative.code: agent_char(pos_z) -> $x;
  agent_char(neg_z) -> $*.
  
  -spec cell_char(cell_state()) -> char().
  cell_char(dead) -> $.;
  cell_char(alive) -> $o.
  