Какую линейную алгебру использовать для OpenGL в Haskell?

Я пытаюсь сделать некоторое программирование OpenGL в haskell. Но меня смущает текущее состояние библиотек. OpenGL использует пакет Tensor, который определяет только несколько типов векторов (но не делает этого в общем виде). Кажется, он не предоставляет реализаций Matrix.

Существует несколько других пакетов для линейной алгебры: Tensor (обратите внимание на нижний регистр T), Vec, hmatrix, которые выглядят более полными, чем Tensor.

То, что я ищу, должно, по крайней мере, содержать общие функции, используемые в 3D и 2D графике, иметь разумную производительность и должно быть совместимо с OpenGL, но я думаю, что я "Мне нужно изменить библиотеку для этого.

Ответ 1

Поздний ответ, извините. HMatrix является стандартным выбором для таких вещей. Он очень совместим, имеет хороший API и фактически используется для компьютерного видения среди других приложений: http://dis.um.es/profesores/alberto/research.html

Ответ 2

Мне было интересно то же самое в последнее время, и особенно раздражало то, что Tensor не предоставляет вам удобные функции для точечного продукта, кросс-продукта, нормализации и т.д.

Как вы указали, vect является "жестко запрограммированным" для Float и Double, и поэтому они не могут иметь полезные экземпляры typeclass, такие как Functor, Monoid или Applicative - с теми, которые мы получили бы много операций "бесплатно", например дополнение: (+) <$> v1 <*> v2.

В #haskell я указал на пакет linear. Он хорошо поддерживается и поставляется с множеством полезных экземпляров и функций.