code: func (p *pin) BeginWatch(edge Edge, callback IRQEvent) error {
  	p.SetMode(ModeInput)
  	if err := write([]byte(edge), p.edgePath); err != nil {
  		return err
  	}
  
  	var event syscall.EpollEvent
  	event.Events = syscall.EPOLLIN | (syscall.EPOLLET & 0xffffffff) | syscall.EPOLLPRI
  
  	fd := int(p.valueFile.Fd())
  
  	p.callback = callback
  	watchEventCallbacks[fd] = p
  
  	if err := syscall.SetNonblock(fd, true); err != nil {
  		return err
  	}
  
  	event.Fd = int32(fd)
  
  	if err := syscall.EpollCtl(epollFD, syscall.EPOLL_CTL_ADD, fd, &event); err != nil {
  		return err
  	}
  
  	return nil
  
  }
docs: // Watch waits for the edge level to be triggered and then calls the callback
  // Watch sets the pin mode to input on your behalf, then establishes the interrupt on
  // the edge provided