tcfail103.hs:15:23: Couldn't match type ‘t’ with ‘s’ ‘t’ is a rigid type variable bound by the type signature for: f :: ST t Int at tcfail103.hs:10:5 ‘s’ is a rigid type variable bound by the type signature for: g :: ST s Int at tcfail103.hs:13:14 Expected type: STRef s Int Actual type: STRef t Int In the first argument of ‘readSTRef’, namely ‘v’ In the expression: readSTRef v Relevant bindings include g :: ST s Int (bound at tcfail103.hs:15:9) v :: STRef t Int (bound at tcfail103.hs:12:5) f :: ST t Int (bound at tcfail103.hs:11:1)