[Hugs-users] Re: one more problem with Hugs

Bulat Ziganshin bulat.ziganshin at gmail.com
Wed Mar 8 14:25:56 EST 2006

Hello Bulat,

Tuesday, March 7, 2006, 2:57:47 PM, you wrote:

BZ> The following code compiles with GHC but not with Hugs. moreover, if
BZ> you replace STURef with STRef in instance definition, all will be
BZ> fine. bug?

i found the answer himself. Hugs just can't properly understand kind
of STURef in this case. "type STURef = STRef" should be changed to
"type STURef s a = STRef s a". btw, there was also another cases where Hugs
can't determine kind of identifier from such "partial type declarations"

... after checking my solution: Hugs also don't allow to use type
synonym here, so i should change this declaration to
"newtype STURef s a = STURef (STRef s a)". at least this work....

BZ> {-# OPTIONS_GHC -cpp -fglasgow-exts #-}
BZ> import Control.Monad.ST
BZ> import Data.STRef

BZ> --
BZ> -----------------------------------------------------------------------------
BZ> -- Unboxed references in ST monad

BZ> type STURef = STRef

BZ> -- | Create new unboxed reference in ST monad
BZ> newSTURef :: e -> ST s (STURef s e)
BZ> newSTURef = newSTRef

BZ> --
BZ> -----------------------------------------------------------------------------
BZ> -- Monad-neutral interface for fast unboxed references

BZ> class (Monad m) => URef m r | m->r, r->m where
BZ>     newURef   :: a -> m (r a)

BZ> instance URef (ST s) (STURef s) where
BZ>     newURef = newSTURef

BZ> --
BZ> -----------------------------------------------------------------------------
BZ> -- Main

BZ> test = runST ( do newURef (0::Int)
BZ>                   return '1'
BZ>              )


Best regards,
 Bulat                            mailto:Bulat.Ziganshin at gmail.com

More information about the Hugs-Users mailing list