anchor.diff:           , xml/3
            , term/3
            , line/3
  +         , zet/3
            , fold/4]).
   
   -define(BLOCK, 1048576).
  
positive.code:   ?state(Acc,?tail_eof(Bin,Off)).
  
  -define(is_empty(X), X=:=<<>>; X=:=<<"\n">>; X=:=<<"\n\r">>).
  chunker(Type) ->
    {ok,Patt} = chunker_patt(Type),
    fun(?tail_eof(Bin,Off)) ->
  
negative.code: term(Filename,Fun,Acc) ->
   fold(Filename,Fun,Acc,[term]).
  
  zet(Filename,Fun,Acc) ->
   fold(Filename,Fun,Acc,[zet]).
  
  fold(Filename,Fun,Acc,Opts) ->
    Type = take_first(Opts,[line,sax,xml,term,zet]),
    case file:open(Filename, [read, raw, binary]) of
      {ok, FD} -> 
        try fold(read(FD),FD,wrap(Fun,Type),chunker(Type),?state(Acc,?tail_0()))
  