Похоже, я частично понял ФП и что же я на самом деле хотел сделать в Лайси.
Я изначально хотел попробовать ФП на практике используя Хаскелль, но не получилось установить его систему. В любом случае, как я понял, есть функции. И эти функции могут иметь допустимные аргументы, в зависимости от которых будет разное поведение функции.
Например, факториал от нуля это один, а факториал от N (где N это натуральное число > 0) это N*факториал(N - 1). Вот это функции. И если мы переслать в факториал дробное число или комплексное, например, то ничего не получится, так как функции для такого типа аргумента не существует и будет ошибка компиляции/исполнения.
Тогда получается, что все или почти все языки программирования как минимум немного функциональные. Тот же Си в аргументах своих функций требует указывать тип. А в питоне можно сделать функцию, где тип не важен, но есть строго определённое кол-во аргументов (то есть обычная функция без звёздочка args и звёздочка звёздочка kvargs).
И вот в Лайси я подсознательно хотел сделать подобный функциональный стиль. Например, template with M0(mat!H!x!W!), M1(mat!W!x!N!), который показывает, что кол-во столбцов одной матрицы и кол-во строк другой должно совпадать (или наоборот, не помню).
И это, допустим, работает на стадии комплияции, так как у меня статическая типизация. А для рантайма пришлось бы использовать assert. Например, если бы были матрицы с произвольными размерами, то пришлось бы его вызывать. В то время как в ФП это надо было бы показать каким-нибудь тождеством, наверное.
И тут получается, что Лайси в приницпе может стать полезным ЯП, так как на таких и можно писать реальные программы. С помощью ассерта можно выдать сообщение об ошибке и пользователю будет легче понять, что он сделал не так. Когда в ФП ему, наверное, показали бы, что есть такие-то экземпляры функций для таких-то аргументов и ему пришлось бы самому искать, что не так.
Поэтому надо продолжать разработку...