[Haskell-cafe] Re: ANNOUNCE: pqueue-mtl, stateful-mtl

David Menendez dave at zednenem.com
Sat Feb 28 03:03:29 EST 2009


On Fri, Feb 27, 2009 at 11:10 PM, Ryan Ingram <ryani.spam at gmail.com> wrote:
> It's obvious that anything that accesses the STT constructor will
> potentially not be typesafe; the question I have is that whether you
> can construct something that isn't typesafe just via the use of runSTT
> & lift.

To my surprise, it turns out that you can.

data Foo m a b = V a | K (Foo m a b -> m b)

test = do
    v <- lift $ callCC $ \k -> return (K k)
    case v of
        K k -> do
            r1 <- newSTTRef 'a'
            lift $ k (V r1)   -- *
        V r1 -> do
            r2 <- newSTTRef (65 :: Int)
            return (r1,r2)

The call to k in the marked line undoes the heap changes since the
call to callCC, and we end up with r1 and r2 both pointing to the same
cell.

-- 
Dave Menendez <dave at zednenem.com>
<http://www.eyrie.org/~zednenem/>


More information about the Haskell-Cafe mailing list