Я хотел бы иметь тип для представления многомерных массивов (тензоров) безопасным способом. поэтому я мог бы написать, например: zero :: Tensor (5,3,2) Integer
, который будет представлять многомерный массив из 5 элементов, каждый из которых имеет 3 элемента, каждый из которых имеет 2 элемента, где все элементы Integer
s
Как бы вы определили этот тип, используя программирование на уровне типов?
Изменить:
После замечательного ответа Алека, который реализовал это с помощью GADT
s,
Интересно, могли бы вы сделать еще один шаг и поддержать несколько реализаций class Tensor
и операций над тензорами и сериализацией тензоров?
так что вы могли бы, например:
GPU
илиCPU
реализации с использованиемC
- чистые
Haskell
реализации - реализация, которая только печатает график вычислений и ничего не вычисляет
- реализация, кэширующая результаты на диске
- параллельные или распределенные вычисления
- так далее...
Все типы безопасны и просты в использовании.
Я намерен создать библиотеку на Haskell, во многом похожую на tensor-flow
, но безопасную по типам и гораздо более расширяемую, используя автоматическое дифференцирование. (рекламная библиотека) и точная действительная арифметика (настоящая библиотека)
Я думаю, что функциональный язык, такой как Haskell
, гораздо больше подходит для этих вещей (для всех вещей, на мой взгляд), чем экосистема Python, которая каким-то образом выросла.
- Haskell является чисто функциональным, гораздо более подходящим для вычислительного программирования, чем Python.
- Haskell намного эффективнее Python и может быть скомпилирован в двоичный код.
- Ленивость Haskell (возможно) устраняет необходимость оптимизации графа вычислений и таким образом делает код намного проще.
- гораздо более мощные абстракции в Haskell
Хотя я вижу потенциал, я просто недостаточно хорошо разбираюсь (или недостаточно умен) для этого программирования на уровне типов, поэтому я не знаю, как реализовать такую вещь в Haskell и заставить ее скомпилировать.
Вот где мне нужна твоя помощь.
subhask
(он много занимается машинным обучением и т. д., так что это может быть актуально, если вы хотите двигаться в направлении TensorFlow), и мой linearmap-category (которая полностью определяет тензоры -agnostic и никогда не говорит об размерах, но говорит о векторных пространствах — они тоже могут быть бесконечномерными). - person leftaroundabout   schedule 08.05.2017