anchor.diff:                              val i = 8: int
                       h4 Conditional logic
                       p.
  -                        There are two ways to conditionally evaluate expressions: <code>if ... then ... else</code>
  -                        and <code>case ... of ...</code> blocks. Both return a value. An if block
  -                        operates on booleans, but case blocks provide generic pattern matching.
  +                        There are two primary ways to conditionally evaluate expressions:
  +                        <code>if ... then ... else</code> and <code>case ... of ...</code> blocks.
  +                        Both return a value. An if block operates only on booleans. There is
  +                        no coercion of types like in C so you cannot test an int directly. You
  +                        must first compare the int to something to produce a boolean value.
                           Here is a simple example of an if block that returns <code>3</code>:
                       pre
                           code.
  
positive.code:                             > val j = if true then (if false then 12 else 14) else 15;
                              val j = 14: int
                      p.
                          Case statements provide generic pattern matching. You can match
                          on any values and can destructure here like anwhere else. Here
                          are a few examples:
                      pre
  
negative.code:                         The <code>!</code> operator dereferences the ref cell to get its value.
                          The type of <code>a</code> and <code>b</code> is <code>ref int</code>.
                      p.
                          Arrays are also mutable values (as opposed to vectors), but we'll get into
                          those in a later chapter.
                      p
                          a(href="/guides/learn-standardml/functions") Chapter 4. Functions