>>19You still have to add the functionality you wanted, only you go through a vastly more convoluted way to do it. Even if it's not Java, the runtime cost is still there.
Of course you still have to do all the work, but that way it's
all in one piece. You just add a piece to the pie and it blends with the rest of the pie seamlessly. As opposed to having to change the old pie and manually sew the string through a lot of places scattered all over the old pie (which you might not have rights to change anyway). It's
modular - new stuff can be totally separated from the old stuff and yet they work seamlessly together.
As for runtime costs, Haskell has none. All the dispatch is done statically by the compiler, you just have to choose which type you want to interpret it as. E.g. one and the same piece of eDSL code can be interpreted as an integer (by doing numeric calculations), a string (just print the code), as a double (do numeric calculations with floating-point precision) etc. But the choice is done statically and there are no runtime checks involved.
Don't know about the slave languages though, they might introduce costs.
their bloody fault
You've just admitted defeat. You can't do something the blog author can, mwahahaha.
Using needlessly abstract bullshite terminology
OK, replace "ADT" with "a type that can be either this or that and there's a tag telling which one it is". You might have heard of them as "tagged unions".