diff --git a/utils.rkt b/utils.rkt index f363f25..003a454 100644 --- a/utils.rkt +++ b/utils.rkt @@ -16,7 +16,7 @@ [stringify-variable-mapping (-> variable-mapping? string-variable-mapping?)] [string->any (-> string? any/c)] [read-org-table (-> string? (listof any/c))] - [unstringify-pairs (-> (listof (general-pair/c string? string?)) + [unstringify-pairs (-> (listof (general-pair/c string? any/c)) (listof (general-pair/c symbol? any/c)))] [read-org-variable-mapping (-> string? variable-mapping?)] [update-vertices/unweighted (-> graph? (-> any/c any/c) graph?)]) @@ -183,16 +183,21 @@ (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. +;;; Given a list of pairs of strings and some other values (possibly +;;; strings), converts the first element of each pair to a string, and +;;; reads the second element with string->any or keeps it as is if it +;;; is not a string. (define (unstringify-pairs pairs) (for/list ([p pairs]) (match p [(list key val) - (cons (string->symbol key) (string->any val))] + (cons (string->symbol key) (if (string? val) + (string->any val) + val))] [(cons key val) ; also handle improper pairs - (cons (string->symbol key) (string->any val))]))) + (cons (string->symbol key) (if (string? val) + (string->any val) + val))]))) ;;; Reads a variable mapping from a string, such as the one which ;;; Org-mode produces from tables.