4 ms·
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
by aviaviavi 9y ago
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.
- m-j-fox 9y agoI'm farther from an expert than you. I tried (and failed) to find a less confusing way... One thing I see people doing when they have real gnarly type signature is to concentrate the horror in one place and paint a veneer of simplicity elsewhere: type Get stateType returnType = forall monad. (SpockState monad ~ stateType, MonadIO monad, HasSpock monad) => monad returnType Then elsewhere: getBlockChain :: Get BlockChainState [Block] getLatestBlock :: Get BlockChainState Block This may only help superficially as type errors will still be hard-to-understand.
- aviaviavi 9y agoAh, I think this is a better though! If you got this working, feel free to open up a PR. Or I can look into it when I get time.