[Haskell-cafe] Re: hmatrix
dons at galois.com
Thu Jun 5 16:11:47 EDT 2008
Good work, Alberto.
hmatrix looks like a good solution answer to some of the nested
arrays questions we have in Haskell
> Hello Bulat and Anatoly,
> I have written a first version of an interface to inplace updates in the
> ST monad for the hmatrix vectors and matrices. Many things must be
> improved (range checking, documentation, etc.) but I hope that the
> general idea makes sense.
> A few usage examples:
> Any suggestion will be welcome. I'm impressed by the power of the ST
> monad, it is extremely useful and elegant. Thank you again for your help!
> In the future I will also try to include efficient conversions to/from
> standard Haskell arrays and those of other related libraries like Jed
> Brown's CArray.
> Bulat Ziganshin wrote:
> >Hello Alberto,
> >Tuesday, June 3, 2008, 12:56:50 PM, you wrote:
> >>Good! So you can easily "hide" the IO operations in the ST monad. I will
> >>definitely look into it.
> >from implementation POV ST monad is nothing but renamed IO monad which
> >exports only subset of its operations which are guaranteed to safe.
> >or, saying in other words, it's just type hackery around IO monad that
> >provides safe operations
> >it's possible to define ST monad and its operations as following:
> >newtype ST s a = forall s. ST_Constructor (IO a)
> >unsafeIOtoSt action = ST_Constructor action
> >runST (ST_Constructor action) = unsafePerformIO action
> >newtype STRef s a = forall s. STRef (IORef a)
> >readSTRef (STRef ref) = unsafeIOtoSt (readIORef ref)
> >and so on. GHC uses technically (but not ideologically!) different
> >implementation where both monads are specializations of one generic
> >type. while Hugs afair uses exactly this approach. you may also look
> >at ArrayRef lib which reimplements arrays/refs for both compilers in
> >more unified way
> >anyway, because ST is just IO monad modulo type tricks, you can
> >execute any IO action inside ST by lifting it with unsafeIOtoSt
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
More information about the Haskell-Cafe