- 1. Reduce head ((map2 +) ⇧1)
- 2. Reduce arg (((map2 *) (((map2 /) ⇧6) ⇧2)) ⇧3)
- 1. Reduce head ((map2 *) (((map2 /) ⇧6) ⇧2))
- 1. Reduce head *
- 2. Reduce arg (((map2 /) ⇧6) ⇧0)
- 1. Reduce head ((map2 /) ⇧6)
- 2. Reduce arg ⇧0
- 3. Reduce (((map2 /) ⇧6) ⇧0) to Nothing
- 3. Reduce ((map2 *) Nothing) to Nothing
- 2. Reduce arg ⇧4
- 3. Reduce (((map2 *) Nothing) ⇧4) to Nothing
- 3. Reduce (((map2 +) ⇧1) Nothing) to Nothing
-
-As soon as we try to divide by 0, safe-div returns Nothing.
-Thanks to the details of map2, the fact that Nothing has been returned
-by one of the arguments of a map2-ed operator guarantees that the
-map2-ed operator will pass on the Nothing as its result. So the
-result of each enclosing computation will be Nothing, up to the root
+> 1. Reduce head ((map2 +) ⇧1)
+> 2. Reduce arg (((map2 *) ((safe_div ⇧6) ⇧0)) ⇧4)
+> 1. Reduce head ((map2 *) ((safe_div ⇧6) ⇧0))
+> 1. Reduce head (map2 *)
+> 2. Reduce arg ((safe_div ⇧6) ⇧0)
+> 1. Reduce head (safe_div ⇧6)
+> 2. Reduce arg ⇧0
+> 3. Reduce ((safe_div ⇧6) ⇧0) to None
+> 3. Reduce ((map2 *) None)
+> 2. Reduce arg ⇧4
+> 3. Reduce (((map2 *) None) ⇧4) to None
+> 3. Reduce (((map2 +) ⇧1) None) to None
+
+As soon as we try to divide by 0, `safe_div` returns `None`.
+Thanks to the details of `map2`, the fact that `None` has been returned
+by one of the arguments of a `map2`-ed operator guarantees that the
+`map2`-ed operator will pass on the `None` as its result. So the
+result of each enclosing computation will be `None`, up to the root