Let’s say I have a record, where I want to use typesafety to prevent myself from using non-prime numbers, ie.
let Prime = < Two | Three | Five >
let myRecord = {..., somePrime : Prime }
This is all well, except for when I serialize it to JSON and I get, say, {..., "somePrime": "Two"}
. Instead, I would like this to be of type Natural
- or at least be serialized as 2
.
I could perhaps use a function such as
myPrettyPrint p = merge { Two = 2, Three = 3, Five = 5} p
My question is - how do I apply this function when I serialize myRecord
in a generic way? I might not know, or it might be too tedious, to specify the exact/multiple occurence(s) of Prime
in that record.
If this was Haskell, I would make a newtype Prime = Int
and create a custom Show
instance.