I believe the main use is for embedded DSLs. I'm afraid I don't have any practical examples on hand to link to.
So you could define
data Request b where GET :: Headers -> Request () POST :: Headers -> body -> Request body
You could go further by typing the headers to recognize the type of body you're dealing with.
So you could define
As the article says, building up your intuition is the hard bit.You could go further by typing the headers to recognize the type of body you're dealing with.