Могут ли хорошие системы типов различать матрицы в разных базах?

Моя программа (Hartree-Fock / итеративный SCF) имеет две матрицы F и F ', которые на самом деле представляют собой одну и ту же матрицу, выраженную в двух разных базах. Я просто потерял три часа времени на отладку, потому что случайно использовал F 'вместо F. В C ++ проверка типов не обнаруживает такого рода ошибки, потому что обе переменные Eigen :: Matrix объектов.

Интересно, для Haskell / ML / etc. люди, Если бы вы писали эту программу, вы бы построили систему типов, в которой F и F 'имели разные типы? Как бы это выглядело? Я в основном пытаюсь понять, как я могу передать некоторые логические ошибки средству проверки типов.

Редактировать: Основа матрицы подобна единице. Вы можете сказать 1 л или сколько угодно галлонов, они оба означают одно и то же. Или, чтобы дать векторный пример, вы можете сказать (0,1) в декартовых координатах или (1, pi / 2) в полярных координатах. Но даже несмотря на то, что значение то же самое, числовые значения разные.

Изменить: Возможно, единицы измерения были неправильной аналогией. Я не ищу какой-то тип записи, где я могу указать, что первое поле будет литрами, а второе галлоны, а скорее способ сказать, что эта матрица в целом определена в терминах какой-то другой матрицы ( основы), где основой может быть любая матрица одинаковых размеров. Например, конструктор будет выглядеть примерно так mkMatrix [[1, 2], [3, 4]] [[5, 6], [7, 8]] , а затем добавление этого объекта в другую матрицу будет проверка типов только в том случае, если оба объекта имеют ту же матрицу, что и их вторые параметры. В этом есть смысл?

Изменить: определение на Википедии , рабочие примеры

29
задан Wang 1 May 2011 в 20:53
поделиться