[Haskell-cafe] Re: hmatrix
Don Stewart
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
aruiz:
> 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:
>
> http://perception.inf.um.es/~aruiz/darcs/hmatrix/examples/inplace.hs
>
> Code:
>
> http://perception.inf.um.es/~aruiz/darcs/hmatrix/lib/Data/Packed/ST.hs
>
> http://perception.inf.um.es/~aruiz/darcs/hmatrix/doc/html/Data-Packed-ST.html
>
> 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.
>
> Thanks,
>
> Alberto
>
>
> 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
> http://www.haskell.org/mailman/listinfo/haskell-cafe
More information about the Haskell-Cafe
mailing list