anchor.diff:               "forms in binding vector, had: 3">> = Reason3,
              ok
          end,
  +
  +  {comments, ""}.
  +
  +-spec letfn(config()) -> result().
  +letfn(_Config) ->
  +  ct:comment("letfn with zero bindings or body"),
  +  #{ op   := letfn
  +   , vars := []
  +   , fns  := []
  +   } = analyze_one(<<"(letfn* [])">>),
  +
  +  ct:comment("letfn with one binding"),
  +  #{ op   := letfn
  +   , vars := Vars1
  +   , fns  := Fns1
  +   } = analyze_one(<<"(letfn* [a (fn* [] :a)] a)">>),
  +  1 = length(Vars1),
  +  1 = length(Fns1),
  +
  +  ct:comment("letfn with two bindings"),
  +  #{ op   := letfn
  +   , vars := Vars2
  +   , fns  := Fns2
  +   } = analyze_one(<<"(letfn* [a (fn* [] :a) b (fn* [] :b)] [a b])">>),
  +  2 = length(Vars2),
  +  2 = length(Fns2),
  +
  +  ct:comment("letfn with two mutually recursive fns"),
  +  #{ op   := letfn
  +   , vars := Vars3
  +   , fns  := Fns3
  +   } = analyze_one(<<"(letfn* [a (fn* [] b) b (fn* [] a)] [a b])">>),
  +  2 = length(Vars3),
  +  2 = length(Fns3),
   
     {comments, ""}.
   
  
positive.code: 
    {comments, ""}.
  
  %%------------------------------------------------------------------------------
  %% Helper functions
  %%------------------------------------------------------------------------------
  
negative.code:         , deftype/1
          , defprotocol/1
          , extend_type/1
          , dot/1
          , 'receive'/1
          , on_load/1
          , macroexpand/1
          ]).
  
  -spec all() -> [atom()].
  