Am Freitag 25 September 2009 09:22:25 schrieb Casey Hawthorne: > Well that makes sense, but for a learner, how is he/she supposed to > know that 'i' could be '(i,i)' or for that matter a tuple of n of > those i's?
minh thu already explained this very well. > > "STUArray s i e" > > Could you also have a tuple of states? You can't choose the state 's', the documentation says "The strict state-transformer monad. A computation of type ST s a transforms an internal state indexed by s, and returns a value of type a. The s parameter is either * an uninstantiated type variable (inside invocations of runST), or * RealWorld (inside invocations of Control.Monad.ST.stToIO). " Without evil hackery (or stToIO), you can only use ST actions/ST(U)Arrays via runST :: (forall s. ST s a) -> a or runST(U)Array :: Ix i => (forall s. ST s (ST(U)Array s i e)) -> (U)Array i e which have rank 2 types (universally qualified type as type of argument [result]), the 'forall s' within the parentheses says it has to work whatever type the rts chooses (actually none), so if you write myFancyArray :: forall s1, s2. ST (s1,s2) (STUArray (s1,s2) Int Int) you can't use it. > > Obviosly, 'e' could be a tuple, for instance (Int,Char) Not for STUArrays, but for STArrays, there's no problem. > > -- > Regards, > Casey _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe