Exception handling in numeric computations (was Re: [Haskell-cafe] Use unsafePerformIO to catch Exception?)

Henning Thielemann lemming at henning-thielemann.de
Tue Mar 24 16:40:27 EDT 2009

On Tue, 24 Mar 2009, Daniel Yokomizo wrote:

> If we try the other approach, we need to express the totality of
> invMat by restricting its domain, so we can add, for example, a
> phantom type to Matrix to signal it is invertible. As you need to
> construct the Matrix before trying to invert it you can always make
> the constructors smart enough to bundle the Matrix with such
> properties. Of course there's need to do some runtime verifications
> earlier, but the clients of invMat are required to do the verification
> earlier or pass it to their clients (up to the level that can handle
> with this issue):
> data Invertible
> tryInvertible :: Matrix a -> Maybe (Matrix Invertible)
> invMat :: Matrix Invertible -> Matrix Invertible

This would be a very elegant solution. However when it comes to floating 
point numbers I'm afraid there are no much other ways than inverting a 
matrix if you want to know if it is invertible. You may however use 
representations of a matrix (like an LU decomposition or a QR 
decomposition) internally that are half-way of inversion.

More information about the Haskell-Cafe mailing list