[Haskell-cafe] vector-space and standard API for vectors
alexey.skladnoy at gmail.com
Fri Oct 22 08:46:26 EDT 2010
It's well known that Num & Co type classes are not adequate for vectors
(I don't mean arrays). I have an idea how to address this problem.
Conal Elliott wrote very nice set of type classes for vectors.
(Definition below). I used them for some time and quite pleased. Code is
concise and readable.
> class AdditiveGroup v where
> zeroV :: v
> (^+^) :: v -> v -> v
> negateV :: v -> v
> class AdditiveGroup v => VectorSpace v where
> type Scalar v :: *
> (*^) :: Scalar v -> v -> v
> class VectorSpace v => InnerSpace v where
> (<.>) :: v -> v -> Scalar v
There are few problems though. Fisrt one is inlining. Functions are not
inlined so if client code uses uses stream fusion it breaks. Second is
dependecies. Vector-space doesn't have big chain of dependencies. People
may be reluctant to use vector-spaces just for API for small packages.
My proposal is to split type classes above into separate package which
provide only type classes, doesn't have any dependencies.
Second point is to lean more on performance side in performance vs
elegance. Add INLINE pragmas everywhere (unfortunate feature of stream
fusion), move ^-^ to AdditiveGroup with default implementation.
I'd like to know opinion of haskellers on this and specifically opinion
of Conal Eliott as author and maintainer (I CC'ed him)
More information about the Haskell-Cafe