module 
       type 
       S
      
       = sig ... 
       end
      
     
     
    
   
    
     
     
      module 
       type 
       S1
      
       = functor
        (_
         : S) 
        ->
        S
      
     
     
    
   
    
     
     type variant
       = 
     
     
      - 
       
       | A
       
- 
       
       | 
        B 
         of int
        
       
- 
       
       | C
       
- 
       
       | D
       
- 
       
       | 
        E 
         of 
        {
       
        - 
         
         a : int;
 }
 
    
   
    
     
     type _ gadt
       = 
     
     
      - 
       
       | 
        A : 
         int gadt
        
       
- 
       
       | 
        B : int 
         -> 
         string gadt
        
       
- 
       
       | 
        C : {
       
        - 
         
         a : int;
 }
         -> 
         unit gadt
        
       
 
    
   
    
     
     type polymorphic_variant
       = [ 
     
     
      - 
       | `A
- 
       | 
        `B of int
       
- 
       | `C
- 
       | `D
 ]
     
    
   
   
    
     
     
      type 
       nonrec nonrec_
       = int
     
     
    
   
    
     
     type empty_conj
       = 
     
     
      - 
       
       | 
        X : 
         [< 
          `X of & 'a & int
            * float
           ]
          -> 
         empty_conj
        
       
 
    
   
    
     
     type conj
       = 
     
     
      - 
       
       | 
        X : 
         [< 
          `X of int & 
           [< `B of int & float ]
           ]
          -> 
         conj
        
       
 
    
   
    
     
     
      val empty_conj : 
       [< 
        `X of & 'a & int * float
         ]
       
      
     
     
    
   
    
     
     
      val conj : 
       [< 
        `X of int & 
         [< `B of int & float ]
         ]
       
      
     
     
    
   
   
   
    
     
     
      module 
       type 
       PolyS
      
       = sig ... 
       end