Я пишу небольшой проект для домашних животных в Racket и использую Gregor lib для обработки дат .
У меня есть функция, которая принимает две даты (от Грегора, а не из стандартной библиотеки), и я хотел бы добавить для нее контракт. В контракте должно быть указано, что дата из первого аргумента должна быть меньше / раньше даты из второго аргумента.
В Грегоре мы можем добиться этого, используя (date‹ =? Xy) или подобный предикат, но я не могу понять, как объединить его с контрактами.
(contract-out
[process-dates (->i ([x date?]
[y (x) (and/c date?
(date>=? x))])])
не будет работать, и нет предиката date>=?/c
"из коробки".
Итак, я полагаю, что мне нужно будет написать такие предикаты самостоятельно, поэтому я хотел бы знать, как это сделать. Я просмотрел источники Racket и обнаружил, что стандартные функции: довольно сложно воспроизвести.
Есть ли более простой способ добиться того, чего я хочу?