code: func InterfaceFromInterfaceType(it reflect.Type) (*Interface, error) {
  	if it.Kind() != reflect.Interface {
  		return nil, fmt.Errorf("%v is not an interface", it)
  	}
  	intf := &Interface{}
  
  	for i := 0; i < it.NumMethod(); i++ {
  		mt := it.Method(i)
  		// TODO: need to skip unexported methods? or just raise an error?
  		m := &Method{
  			Name: mt.Name,
  		}
  
  		var err error
  		m.In, m.Variadic, m.Out, err = funcArgsFromType(mt.Type)
  		if err != nil {
  			return nil, err
  		}
  
  		intf.Methods = append(intf.Methods, m)
  	}
  
  	return intf, nil
  }
docs: // The following code is intended to be called by the program generated by ../reflect.go.