anchor.diff:          !- (sprintf "open %s" s)
       // There is no nested types and they are recursive if there are more than one definition
       | Types(t::ts) ->
  -        genTypeDefn astContext true t +> colPre (rep 2 sepNln) (rep 2 sepNln) ts (genTypeDefn astContext false)
  +        genTypeDefn { astContext with IsFirstChild = true } t 
  +        +> colPre (rep 2 sepNln) (rep 2 sepNln) ts (genTypeDefn { astContext with IsFirstChild = false })
       | md ->
           failwithf "Unexpected module declaration: %O" md
   
  
positive.code:     | ps -> 
          !- prefix +> opt sepSpace ao genAccess -- propertyKind +> col sepSpace ps (genPat astContext) +> sepEq +> preserveBreakNln astContext e
  
  and genPropertyWithGetSet astContext inter (b1, b2) =
      match b1, b2 with
      | PropertyBinding(ats, px, ao, isInline, mf1, PatLongIdent(ao1, s1, ps1, _), e1), 
        PropertyBinding(_, _, _, _, _, PatLongIdent(ao2, _, ps2, _), e2) ->
          let prefix =
              genPreXmlDoc px
              +> genAttributes astContext ats +> genMemberFlags astContext inter mf1
              +> ifElse isInline (!- "inline ") sepNone +> opt sepSpace ao genAccess
          assert(ps1 |> Seq.map fst |> Seq.forall Option.isNone)
          assert(ps2 |> Seq.map fst |> Seq.forall Option.isNone)
  
negative.code: 
      | b -> failwithf "%O isn't a member binding" b
  
  and genMemberFlags astContext = function
      | MFMember _ -> !- "member "
      | MFStaticMember _ -> !- "static member "
      | MFConstructor _ -> sepNone
      | MFOverride _ -> ifElse astContext.IsInterface (!- "member ") (!- "override ")
  
  and genVal astContext (Val(ats, px, ao, s, t, vi, _)) = 
      let (FunType namedArgs) = (t, vi)
  