On Dec 29, 2008, at 3:43 PM, Andre Nathan wrote:
On Mon, 2008-12-29 at 14:19 -0500, Ross Mellgren wrote:
The problem is that you're trying to take a STMatrix from some other
ST computation and freeze it in a new ST computation. The isolation
between separate computations is done via the rank-2 type variable "s"
in all those ST functions.

I guess I should go and read the rank-n types page on the wiki...

Try this:

freezeMatrix :: (forall s . STMatrix s a) -> Matrix a
freezeMatrix f :: runST (freezeMatrix f)

Do you know why point-free style doesn't work here even with the type
annotation?

I'm not very good with all the type-theoretic principles involved, but I think it's because higher ranked types cannot unify with lower ranked ones. I'm sure some of the more wizardly types could explain this with an example of how doing it like that would make something that should be illegal possible and the actual principles involved.

(That's longhand for "it makes a kind of intuitive sense to me but I can't explain it")

Also, instead of using an array of arrays, maybe an array with (Int,
Int) as the Ix might be a bit smoother?

Thanks for the suggestion. It didn't occur to me that there was an Ix
instance for that.

Best,
Andre


-Ross


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to