typelevel / algebra

Experimental project to lay out basic algebra type classes
https://typelevel.org/algebra/
Other
378 stars 69 forks source link

Array instances #130

Open rklaehn opened 8 years ago

rklaehn commented 8 years ago

Add instances for arrays.

Arrays are essential in many cases for compact representation, so I think having array instances would be good.

I care most about really basic things like Eq[A] and Order[A], but I guess it would do no harm to just copy everything applicable to algebra from https://github.com/non/spire/blob/master/core/shared/src/main/scala/spire/std/array.scala

denisrosset commented 8 years ago

Agree totally.

rklaehn commented 8 years ago

Should this use @specialized or not?

denisrosset commented 8 years ago

Thanks @rklaehn, I guess the issue can be closed!

rklaehn commented 8 years ago

Well, it depends. There are a lot of instances that we could provide. I just copied over the essential (for me) ones. But I think we should at least provide Monoid before we close the issue.

johnynek commented 8 years ago

We probably want a few:

def concatMonoid[T: ClassTag]: Monoid[Array[T]]
// then the usual vector space style ones, which are probably what people want:
def extendingPointwiseSemigroup[T: ClassTag: Semigroup]: Semigroup[Array[T]]
// you can do pretty much everything this way in core except Field, I think.
// It is a shame we have to write those all out. Maybe macros could help here.