Those are not the same 'a. There is one 'a in the definition of Result and a totally different, unrelated 'a in the definition of Parser.
For the purposes of further explanation, I'm going to rename one of them, otherwise it's just going to be verbal spaghetti:
type Result<'a> =
| Success of 'a
| Failure of string
type Parser<'b> = Parser of (string -> Result<'b * string>)
So here, inside the definition of Parser, we use Result, and give it 'b * string as parameter. Therefore, inside the definition of Result, 'a = 'b * string.
Which in turn means that there are two possible values:
Success of ('b * string)
Failure of string
The meaning of this is that a parser can either fail (returning an error as a string) or succeed, in which case it returns the resulting parsed value 'b plus the "remainder" (aka "unconsumed part") of the input text.
From your comments it seems like you may be getting tripped up on the fact that 'a * string seems to mirror Result cases Success of 'a and Failure of string.
This seeming symmetry is a pure coincidence. The Parser type just needed that to be 'a * string for reasons completely unrelated to how the Result type itself is structured.
For further illustration, here are some other equally valid types:
type T = Result<int>
type U = Result<bool list>
type V<'a> = Result<int * 'a * string>
type W = Result<Result<float>>
type F<'q> = 'q -> Result<obj>
type G = Result<string> -> int
type H<'a, 'b, 'c> = Result<'a> -> Result<'b> -> Result<'c>