Doesn't this just cause the same problems? If language B (the type system) is Turing complete you'll start doing whatever you don't like doing in language A (the host) and end up with similar problems you had in A, but now in B.
| but still be adapted to very different purposes.
I guess this is what's needed but each should be constrained as to NOT be able to do certain things.
Would building a DSL in the language give you the same dynamic?