anchor.diff:  typeclass MkEmulateMemServerPort#(type inMemServerT, type outMemServerT);
       module mkEmulateMemServerPort#(inMemServerT mem)(outMemServerT);
   endtypeclass
  +
  +instance MkEmulateMemServerPort#(CoarseMemServerPort#(addrSz, logNumBytes), MMIOServerPort#(addrSz, logNumBytes));
  +    module mkEmulateMemServerPort#(CoarseMemServerPort#(addrSz, logNumBytes) mem)(MMIOServerPort#(addrSz, logNumBytes))
  +            provisos (NumAlias#(TMul#(8,TExp#(logNumBytes)), dataSz));
  +        AtomicMemServerPort#(addrSz, logNumBytes) _mem <- mkEmulateMemServerPort(mem);
  +        interface InputPort request;
  +            method Action enq(MMIOReq#(addrSz, logNumBytes) req);
  +                _mem.request.enq(AtomicMemReq{ write_en: getWriteEn(req), atomic_op: req.atomic_op, addr: req.addr, data: req.data });
  +            endmethod
  +            method Bool canEnq;
  +                return _mem.request.canEnq;
  +            endmethod
  +        endinterface
  +        interface OutputPort response;
  +            method ByteEnMemResp#(logNumBytes) first;
  +                return _mem.response.first;
  +            endmethod
  +            method Action deq;
  +                _mem.response.deq;
  +            endmethod
  +            method Bool canDeq;
  +                return _mem.response.canDeq;
  +            endmethod
  +        endinterface
  +    endmodule
  +endinstance
   
   instance MkEmulateMemServerPort#(CoarseMemServerPort#(addrSz, logNumBytes), AtomicMemServerPort#(addrSz, logNumBytes));
       module mkEmulateMemServerPort#(CoarseMemServerPort#(addrSz, logNumBytes) mem)(AtomicMemServerPort#(addrSz, logNumBytes))
  
positive.code: typedef AtomicMemServerPort#(addrSz, 3) AtomicMem64ServerPort#(numeric type addrSz);
  typedef AtomicMemClientPort#(addrSz, 3) AtomicMem64ClientPort#(numeric type addrSz);
  
  ////////////////////////////////////////////////////////////////////////////////
  
  // Unifying Memory Types and Typeclasses
  
negative.code: 
  typedef ServerPort#(AtomicMemReq#(addrSz, logNumBytes), AtomicMemResp#(logNumBytes)) AtomicMemServerPort#(numeric type addrSz, numeric type logNumBytes);
  typedef ClientPort#(AtomicMemReq#(addrSz, logNumBytes), AtomicMemResp#(logNumBytes)) AtomicMemClientPort#(numeric type addrSz, numeric type logNumBytes);
  
  typedef ServerPort#(MMIOReq#(addrSz, logNumBytes), MMIOResp#(logNumBytes)) MMIOServerPort#(numeric type addrSz, numeric type logNumBytes);
  typedef ClientPort#(MMIOReq#(addrSz, logNumBytes), MMIOResp#(logNumBytes)) MMIOClientPort#(numeric type addrSz, numeric type logNumBytes);
  
  ////////////////////////////////////////////////////////////////////////////////
  
  