anchor.diff:          , seq/1
           , equiv/1
           , cons/1
  +        , reduce/1
           , complete_coverage/1
           ]).
  +
  +-clojure(true).
   
   -type config() :: list().
   -type result() :: {comments, string()}.
  
positive.code: seq(_Config) ->
    Cons = range(1, 3),
    1 = clj_core:first(Cons),
    2 = clj_core:first(clj_core:next(Cons)),
    3 = clj_core:first(clj_core:next(clj_core:next(Cons))),
  
    Cons1     = range(1, 1),
  
negative.code: 
    {comments, ""}.
  
  -spec reduce(config()) -> result().
  reduce(_Config) ->
    PlusFun = fun
                ([]) -> 0;
                ([X, Y]) -> X + Y
              end,
  
    TenCons = range(1, 10),
    55 = 'clojerl.IReduce':reduce(TenCons, PlusFun),
    60 = 'clojerl.IReduce':reduce(TenCons, PlusFun, 5),
  
    PlusMaxFun = fun
                   ([]) -> 0;
                   ([X, Y]) when X < 10 -> X + Y;
                   ([X, _]) -> 'clojerl.Reduced':?CONSTRUCTOR(X)
              end,
    Reduced = 'clojerl.IReduce':reduce(TenCons, PlusMaxFun),
    10 = clj_core:deref(Reduced),
  
    {comments, ""}.
  
  -spec complete_coverage(config()) -> result().
  complete_coverage(_Config) ->
    ?NIL = 'clojerl.Cons':'_'(?NIL),
  