From eacd2a07a0fd7975b4edd9b25d129bf64c913420 Mon Sep 17 00:00:00 2001 From: Sergiu Ivanov Date: Sat, 22 Feb 2020 19:14:46 +0100 Subject: [PATCH] utils: Also generalise the contract of unstringify-pairs. --- utils.rkt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/utils.rkt b/utils.rkt index 5934229..950ccb1 100644 --- a/utils.rkt +++ b/utils.rkt @@ -15,10 +15,12 @@ [stringify-variable-mapping (-> variable-mapping? string-variable-mapping?)] [string->any (-> string? any/c)] [read-org-table (-> string? (listof any/c))] - [unstringify-pairs (-> (listof (list/c string? string?)) (listof (list/c symbol? any/c)))]) + [unstringify-pairs (-> (listof (general-pair/c string? string?)) + (listof (general-pair/c symbol? any/c)))]) ;; Contracts (contract-out [variable-mapping? contract?] - [string-variable-mapping? contract?]) + [string-variable-mapping? contract?] + [general-pair/c (-> contract? contract? contract?)]) ;; Syntax auto-hash-ref/explicit auto-hash-ref/: sgfy) @@ -174,6 +176,11 @@ ;;; table. See example.org for examples. (define (read-org-table str) (string->any str)) +;;; A contract allowing pairs constructed via cons or via list. +(define (general-pair/c key-contract val-contract) + (or/c (list/c key-contract val-contract) + (cons/c key-contract val-contract))) + ;;; Given a list of pairs of strings, converts the first element of ;;; each pair to a string, and reads the second element with ;;; string->any.