Я пытаюсь изучить Идрис, перестраивая (более простым способом) некоторые вещи, которые мы недавно делали на работе.
Я хотел бы иметь тип данных, который моделирует главную книгу с вектором кредитов и вектором дебетов. Я зашел так далеко:
data GL : Type where
MkGL : (credits : Vect n Integer) ->
(debits : Vect m Integer) ->
(sum credits = sum debits) ->
GL
emptyGL : GL
emptyGL = MkGL [] [] Refl
но я не уверен, как добавлять записи в уже существующий GL.
С функцией вроде
addTransactions : GL -> (Vect j Integer) -> (Vect k Integer) -> Maybe GL
Как мне проверить/обеспечить, чтобы новый GL играл по правилам?
prelude/Decidable/Equality
. Он содержит разрешимое равенство для Nats. Сопоставление с образцом наdecEq (sum credits) (sum debits)
дает вам либо доказательствоsum credits = sum debits
(назовем егоequal_sums
), чтобы вы могли вернутьJust (MkGl credits debits equal_sums)
, либо доказательство неравенства сумм, чтобы вы могли вернутьNothing
. - person user3237465   schedule 01.12.2014