[Haskell-cafe] matrix computations based on the GSL
Conal Elliott
conal at conal.net
Thu Jul 7 14:10:59 EDT 2005
Maybe we could solve this problem in a simple and general way by working
with a more abstract notion of linear maps, rather than the matrices
commonly used to represent linear maps. Instead of "Matrix n m", where
n and m are either integers (requiring something like dependent types)
or type encodings of integers, use "LMap u v", where u and v are vector
spaces, e.g., R^n and R^m. This change would eliminate the need for
dependent types or integer encodings. From another perspective, the
integers are encodings of the vector space types, but a very restricted
subset of vector space types. If we take the encoding out of the
interface, we might get a much mor general library, allowing for linear
maps between *any* vector spaces, not just ones of the form R^n. For
instance, linear maps are vector spaces also, so we can handle "LMap u
(LMap u v)" (the range type of the second derivative of a u->v
function).
Also, it's clear that "LMap R R^n" and "LMap R^n R" are different types
(for n/=1), so we can distinguish between "row" and "column" vectors
without creating more types. Are there other reasons for orienting
vectors?
I can't call these comments a concrete proposal, as it's not clear to me
how to define LMap and what operations it supports. It may be worth
exploring, though.
Cheers, - Conal
-----Original Message-----
From: Lennart Augustsson
Sent: Thursday, July 07, 2005 5:44 AM
To: David Roundy
Cc: haskell-cafe at haskell.org
Subject: Re: [Haskell-cafe] matrix computations based on the GSL
David Roundy wrote:
> The issue is that Haskell (as far as I understand, and noone has
suggested
> anything to the contrary) doesn't have a sufficiently powerful type
system
> to represent matrices or vectors in a statically typed way. It would
be
> wonderful if we could represent matrix multiplication as
>
> matrix_mul :: Matrix n m -> Matrix m o -> Matrix n o
>
Actually, Haskell does allow you to do that. But the syntax of the
types gets pretty horrendous.
I'm sure Oleg will show you how any moment now. :)
-- Lennart
More information about the Haskell-Cafe
mailing list