[racket] JSExprs and hashtables

From: Sam Tobin-Hochstadt (samth at cs.indiana.edu)
Date: Mon Jan 19 09:38:16 EST 2015

This is a correct improvement to Typed Racket -- I'll make it shortly.

Sam

On Mon, Jan 19, 2015 at 8:41 AM, Alexander D. Knauth
<alexander at knauth.org> wrote:
> I managed to fix this for your example by inserting these 3 lines into
> typed-racket/types/remove-intersect.rkt after line 67:
>          [(list-no-order (Value: (not (? hash?)))
>                          (or (? Hashtable?) (? HashtableTop?)))
>           #f]
> There is probably a better solution though.
>
> On Jan 19, 2015, at 7:36 AM, Alexander D. Knauth <alexander at knauth.org>
> wrote:
>
> Since hash-tables can be mutable as far as TR knows, (HashTable Symbol
> String) is not a subtype of (HashTable Symbol JSExpr).
> To work around this, you can do this:
> #lang typed/racket/base
> (require typed/json)
> (: jsx JSExpr)       ; <-- jsx is what I ultimately want.
> (define jsx (ann #hasheq((a . "val1") (b . "val2") (c . "val3")) (HashTable
> Symbol JSExpr)))
>
> Or this would work too:
> #lang typed/racket/base
> (require typed/json)
> (: jsx (HashTable Symbol JSExpr))       ; <-- jsx is what I ultimately want.
> (define jsx #hasheq((a . "val1") (b . "val2") (c . "val3")))
>
> Or you could use (inst make-immutable-hasheq Symbol JSExpr) instead of using
> #hasheq, and it would do the same thing.
>
>
> On Jan 19, 2015, at 1:28 AM, Jordan Johnson <jmj at fellowhuman.com> wrote:
>
> Hi all,
>
> I’ve been trying to create JSExprs, as defined in the typed/json library.
> This is one of those instances where it seems like I must be making things
> harder than they should be, but I’m still feeling like a duck on
> rollerskates in TR, so I want to make sure I’m not missing an easier way to
> do it.
>
> Would you please confirm if this is indeed a smallest-possible solution?
>
> ;;;; begin
> #lang typed/racket/base
>
> (require typed/json)
>
> (: jsx JSExpr)       ; <-- jsx is what I ultimately want.
>
> ;; Attempt #1:
> #;
> (define jsx #hasheq((a . "val1") (b . "val2") (c . "val3")))
>
> #| Resulting error:
> Type Checker: type mismatch
>   expected: JSExpr
>   given: (HashTable Symbol String)
>
> [This seems weird, since it seems like (HashTable Symbol String) should be
>  a subtype of JSExpr. Is the problem that the typechecker can’t recognize
>  the Strings as JSExprs?]
> |#
>
> ;; Attempt #N (shortest successful version I’ve found):
> (define jsx
>   (for/hasheq : (HashTable Symbol JSExpr) ([k '(a b c)]
>                                            [v '("val1" "val2" "val3")])
>     (values k v)))
> ;;;; end
>
> Regards,
> Jordan
>
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users
>
>
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users
>
>
>
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users
>


Posted on the users mailing list.