f :: a -> forall s. ST s a f x = do s <- newSTRef x readSTRef s g = runST (f 1)
はOKだけれど、
g = runST $ f 1
はエラーになるというのに気づかずに長いことはまってしまいました…どうしてそうなるのかはなんとなく分かるのですが、所詮なんとなく。