Yeah, it's for the compiler, otherwise it can't figure out that a BlockChainState is actually a SpockState m. I'm not really sure how it could otherwise, since the definition is completely decoupled from Spock.
It should be noted that it's entirely possible there's a less confusing way to write that type signature. I'm far from an expert in Haskell.