Моя программа (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]]
, а затем добавление этого объекта в другую матрицу будет проверка типов только в том случае, если оба объекта имеют ту же матрицу, что и их вторые параметры. В этом есть смысл?
Изменить: определение на Википедии , рабочие примеры