Jonathan Cast-2 wrote: > > Taking the `let open' syntax from `First-class > Modules for Haskell' [1], we can say > > let open runST' = runST in > let > ref = runST' $ newSTRef 0 > !() = runST' $ writeSTRef ref 1 > !() = runST' $ writeSTRef ref 2 > in runST' $ readSTRef ref > > This type-checks because the let open gives us the *same* skolemized > constant for s everywhere in the sequel. >
One answer, of course, is to lift the skolem type-constant into a kind of IO-like type-monad. Sort of like getLine :: IO String, which is still "constant" in a way, since the program doesn't vary. You'd then want kind-level functions like returnK :: * -> M * and the rest. It would be interesting to see this made explicit in System F. -- View this message in context: http://www.nabble.com/forall---ST-monad-tp22024677p22106898.html Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com. _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
