[Haskell-cafe] vector-space and standard API for vectors

Alexey Khudyakov alexey.skladnoy at gmail.com
Sat Oct 23 16:53:32 EDT 2010


On 23.10.2010 05:11, wren ng thornton wrote:
> On 10/22/10 8:46 AM, Alexey Khudyakov wrote:
>> Hello everyone!
>>
>> 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
>> [...]
>> I'd like to know opinion of haskellers on this and specifically opinion
>> of Conal Eliott as author and maintainer (I CC'ed him)
>
> Just my standard complaint: lack of support for semirings, modules, and
> other simple/general structures. How come everyone's in such a hurry to
> run off towards Euclidean spaces et al.?
>
They give familiar warm fuzzy feeling. It's same as monads and 
applicative functors (-:

> I'd rather see,
>
> class Additive v where -- or AdditiveMonoid, if preferred
>   zeroV :: v
>   (^+^) :: v -> v -> v
>
> class Additive v => AdditiveGroup v where
>   negateV :: v -> v
>
Seems good for me. One more instance declaration to write and no changes 
in usage.

However when written this way it becomes obvious that
`zeroV' == `mempty' and ^+^ = mappend. Is Additive really needed then?

> type family Scalar :: * -> *
>
> class Additive v => LeftModule v where
>   (*^) :: Scalar v -> v -> v
>
> class Additive v => RightModule v where
>   (^*) :: v -> Scalar v -> v
>
Could you give some example of data type for which (*^) ≠ flip (^*)?
I couldn't imagine one.

> ...
>
> Though I don't know how much that'd affect the niceness properties you
> mentioned.
>



More information about the Haskell-Cafe mailing list