question: public NType merge ( NType a , NType b ) throws MergeFailed { if ( a != null && b == null ) return a ; if ( a == null && b != null ) return b ; if ( a == null && b == null ) return null ; if ( a . equals ( b ) ) return a ; try { return Dispatcher . dispatch ( getClass ( ) , this , "accept" , a , b ) ; } catch ( NoSuchMethodException e ) { throw new MergeFailed ( "a and b are of different NType" , a , b ) ; } }
target:  Merge a and b.