Определение типа в функциональном языке

В небольшой Программе пользователи вставляют несколько типизированных формул и соединяют их вместе, чтобы создать систему одновременных уравнений. И я хотел бы ввести проверку типов во время выполнения, чтобы сообщить об ошибке, если измерения не совпадают

Основными типами могут быть все что угодно, например Persons, Money, Money/Period, m^2/s^2 и т.д., и вводятся как строки во время выполнения

Я читал о выводе типа Хиндли-Милнера, но подумал, что это немного преувеличено.

Моя идея заключалась в том, чтобы опираться на два правила:

сначала токенизируй, потом

If (a + b) or (a-b) the dimensions must match! [a] = [b]

если a*b, то измерения "расширяются" или "сокращаются" в том смысле, что вы отслеживаете количество отдельных измерений, например

Person/Year * Money/Year * Money*Year^2 ===> Money(2) Person(1) Year(2) / Year(1)

затем вычесть отдельные счета, таким образом оставляя Money(2) Person(1) Year(1) как final type

это может быть реализовано как обход дерева, где размерные ограничения проверяются на (+/-)- узел, а затем упрощается, чтобы получить окончательный ответ

Это хороший способ решить эту проблему?

0 ответов

Другие вопросы по тегам