anchor.diff:      Gl = {list,[{step,'when',expr_list(Gs, [$,], fun constraint/2, Opts)}]},
       {list,[{step,Before,Gl}]}.
   
  +constraint({type,_Line,constraint,[{atom,_,is_subtype},[{var,_,_}=V,Type]]},
  +           _Opts) ->
  +    typed(lexpr(V, options(none)), Type);
   constraint({type,_Line,constraint,[Tag,As]}, _Opts) ->
       simple_type(Tag, As).
   
  
positive.code: ltype({type,_Line,'fun',[{type,_,product,_},_]}=FunType, _) ->
      [fun_type(['fun',$(], FunType),$)];
  ltype({type,Line,T,Ts}, _) ->
      %% Compatibility. Before 18.0.
      simple_type({atom,Line,T}, Ts);
  ltype({user_type,Line,T,Ts}, _) ->
      simple_type({atom,Line,T}, Ts);
  
negative.code:     attr("import", [{var,a0(),pname(Name)}]);
  lattribute(import, {From,Falist}, _Opts, _State) ->
      attr("import",[{var,a0(),pname(From)},falist(Falist)]);
  lattribute(export_type, Talist, _Opts, _State) ->
      call({var,a0(),"-export_type"}, [falist(Talist)], 0, options(none));
  lattribute(optional_callbacks, Falist, Opts, _State) ->
      ArgL = try falist(Falist)
             catch _:_ -> abstract(Falist, Opts)
  