anchor.diff:              | Right (Left world) -> (Violation ([!!"OutOfRangeArgument"; !!"Container"; !!(String.capitalize fnName)], "Cannot apply " + fnName + " to a container with no elements.", fnOriginOpt), world)
               | Left error -> error
   
  -        let rec evalScanWhileCodata evalApply fnOriginOpt fnName fn state codata world =
  +        let rec evalScanWhileCodata evalApply fnOriginOpt fnName scanner state codata world =
               match codata with
  -            | Empty -> Right (state, [], world)
  +            | Empty ->
  +                Right (state, [], world)
               | Add (left, right) ->
  -                match evalScanWhileCodata evalApply fnOriginOpt fnName fn state left world with
  +                match evalScanWhileCodata evalApply fnOriginOpt fnName scanner state left world with
                   | Right (state, statesLeft, world) ->
  -                    match evalScanWhileCodata evalApply fnOriginOpt fnName fn state right world with
  +                    match evalScanWhileCodata evalApply fnOriginOpt fnName scanner state right world with
                       | Right (state, statesRight, world) -> Right (state, statesRight @ statesLeft, world)
                       | error -> error
                   | error -> error
               | Unfold (unfolder, costate) ->
  -                match evalApply [fn; costate] fnOriginOpt world with
  -                | (Option (Some covalue), world) ->
  -                    match evalApply [unfolder; state] fnOriginOpt world with
  -                    | (Option (Some state), world) -> evalScanWhileCodata evalApply fnOriginOpt fnName fn state (Unfold (unfolder, covalue)) world
  +                match evalApply [unfolder; costate] fnOriginOpt world with
  +                | (Option (Some costate), world) ->
  +                    match evalApply [scanner; state; costate] fnOriginOpt world with
  +                    | (Option (Some state), world) -> evalScanWhileCodata evalApply fnOriginOpt fnName scanner state (Unfold (unfolder, costate)) world
                       | (Option None, world) -> Right (state, [], world)
                       | (_, world) -> Left (Violation ([!!"InvalidResult"; !!"Container"; !!(String.capitalize fnName)], "Function " + fnName + "'s scanner must return an option.", fnOriginOpt), world)
                   | (Option None, world) -> Right (state, [], world)
                   | (_, world) -> Left (Violation ([!!"InvalidResult"; !!"Container"; !!(String.capitalize fnName)], "Function " + fnName + "'s scanner must return an option.", fnOriginOpt), world)
               | Conversion list ->
                   Seq.foldWhileRight (fun (state, states, world) elem ->
  -                    match evalApply [fn; state; elem] fnOriginOpt world with
  -                    | (Option (Some value), world) -> (Right (value, value :: states, world))
  +                    match evalApply [scanner; state; elem] fnOriginOpt world with
  +                    | (Option (Some state), world) -> (Right (state, state :: states, world))
                       | (Option None, world) -> Left (List states, world)
                       | _ -> Left (Violation ([!!"InvalidResult"; !!"Codata"; !!(String.capitalize fnName)], "Function " + fnName + "'s scanner must return an option.", fnOriginOpt), world))
                       (Right (state, [], world))
  
positive.code:             | [fn; state; String str] ->
                  let (_, states, world) =
                      Seq.foldi (fun i (state, states, world) elem ->
                          let (value, world) = evalApply [fn; Int i; state; String (string elem)] fnOriginOpt world
                          (value, value :: states, world))
                          (state, [], world)
                          str
                  (List (List.rev states), world)
              | [fn; state; List list] ->
                  let (_, states, world) =
                      Seq.foldi (fun i (state, states, world) elem ->
                          let (value, world) = evalApply [fn; Int i; state; elem] fnOriginOpt world
                          (value, value :: states, world))
                          (state, [], world)
                          list
                  (List (List.rev states), world)
              | [fn; state; Ring set] ->
                  let (_, states, world) =
                      Seq.foldi (fun i (state, states, world) elem ->
                          let (value, world) = evalApply [fn; Int i; state; elem] fnOriginOpt world
                          (value, value :: states, world))
                          (state, [], world)
                          set
                  (List (List.rev states), world)
  
negative.code:             | [fn; state; String str] ->
                  let (_, states, world) =
                      Seq.fold (fun (state, states, world) elem ->
                          let (state, world) = evalApply [fn; state; String (string elem)] fnOriginOpt world
                          (state, state :: states, world))
                          (state, [], world)
                          str
                  (List (List.rev states), world)
              | [fn; state; List list] ->
                  let (_, states, world) =
                      Seq.fold (fun (state, states, world) elem ->
                          let (state, world) = evalApply [fn; state; elem] fnOriginOpt world
                          (state, state :: states, world))
                          (state, [], world)
                          list
                  (List (List.rev states), world)
              | [fn; state; Ring set] ->
                  let (_, states, world) =
                      Seq.fold (fun (state, states, world) elem ->
                          let (state, world) = evalApply [fn; state; elem] fnOriginOpt world
                          (state, state :: states, world))
                          (state, [], world)
                          set
                  (List (List.rev states), world)
  