A friend recently asked me if there was a way to generate syntax in Haskell. A simple example of the sort of thing he was asking about is: He wants something sort of like if (condition) then (something) which should evaluate the condition, and if it's true it yields Just (something) and if false it yields Nothing. Obviously you can't reuse the keywords if and then. (Disregarding certain nonstandard features of the compiler.)

I said well, it's easy to write

    myif c v = if c then Just v else Nothing

but that doesn't get his then in there beacause you use it like this:

    myif (condition) (something)

So then I said you can write

    myif c _ v = if c then Just v else Nothing

and use it like this:

    myif (condition) "then" (something)

and it will ignore the "then". This is kind of gross. And nothing stops you from writing myif ... "wombat" ... instead.

But then I had a brainwave, and said you could do this:

    data Then = Then
    myif c Then v = if c then Just v else Nothing

Now you use it like this:

    myif (condition) Then (something)

the Then will be type-checked and you will get a reasonably clear error message if you leave it out or misspell it.

I think I am not the first person to invent this technique and that I have seen it before somewhere.

So my question is, is this technique, of making up a one-element type to use as a pretend keyword, something that is common, well-known, uncommon, rare, or unheard-of? If I did this in my Haskell code, would an experienced Haskeller see it and say “wow, that is bizarre” or “Oh, he's just doing that, sure”.