Hi, I'm writing a module that contains a data type for a MacAddress.

Given that, I can do things like validate and format.

But there are several ways you can display a MacAddress:

'aabbccddeeff' or '00:11:22:33:AA:BB' or 'aa:bb:cc:00:11:22'.

Different external systems want the mac addresses in different formats, and I'd like to centralize that logic.

** So the design question:

I can't just use a `show` function directly to do this, since there are options I need to pass.

I could use separate functions that return a string.

I could use newtype to wrap each display style of mac address in a type that has a specific `show` instance that spits out the right format. So a `Pretty` and `Lower` and similar types.

---

Is there a best-practice here? Am I totally missing a better way to model this idea?