Q is capable of being an instance of MonadFix, I've opened a ticket
here, I'd appreciate it if someone could take a look:
https://ghc.haskell.org/trac/ghc/ticket/12073
```
instance MonadFix Q where
mfix k = do
m <- runIO newEmptyMVar
ans <- runIO (unsafeInterleaveIO (takeMVar m))
result <- k ans
runIO (putMVar m result)
pure result
```