Okay so there's a few ways to do this. You can do it with fastcat or squeeze if you're willing to break everything apart into the right weightings so like
but if you want just literal string concatenation then you can always just do
red = parseBP_E $ "[1 1 " ++ blue ++ "0 <0 ~ ~ 0 1 > <1 ~ 0 ~ > <1 ~ ~ >" ++ blue ++ "]"
which I personally kinda like just because it builds exactly what you think it would build by treating the strings as strings until you turn it into a pattern
I don't know have I missed an even more clever way of getting all the weightings right but keeping the code simple?