Unfortunately, that doesn't work -- the values in the hash could
include functions.

Sam

On Tue, Nov 24, 2020 at 7:25 AM Tim Jervis <tim.jer...@gmail.com> wrote:
>
> For the type of the third argument, rather than "any non-function", could 
> Typed Racket use the type of the values in the hash?
>
> On Tuesday, 21 April 2020 at 15:51:00 UTC+1 Sam Tobin-Hochstadt wrote:
>>
>> The problem here is with the optional third argument to `hash-ref`.
>> Typed Racket only allows `#f` or functions as the third argument.
>> Plain Racket allows any non-function value as a default, or a function
>> which is called to produce the default. Since "any non-function" is
>> not expressible in Typed Racket, it's more restricted here.
>>
>> The best option is to wrap the third argument in a thunk: `(lambda () 
>> 'other)`.
>>
>> As an aside, you probably don't want to use `cast` this extensively in
>> your program.
>>
>> Sam
>>
>> On Tue, Apr 21, 2020 at 10:35 AM Hendrik Boom <hen...@topoi.pooq.com> wrote:
>> >
>> > In typed Racket I define a hashtable:
>> >
>> > (: vector-to-contract (HashTable TType CContract))
>> >
>> > (define vector-to-contract
>> > (make-hash
>> > (cast '(
>> > (_bytes . bytes?)
>> > (_s8vector . s8vector?)
>> > (_u16vector . u16vector?)
>> > (_s16vector . s16vector?)
>> > (_u32vector . u32vector?)
>> > (_s32vector . s32vector?)
>> > (_u64vector . u64vector?)
>> > (_s64vector . s64vector?)
>> > (_f32vector . f32vector?)
>> > (_f64vector . f64vector?))
>> > (Listof (Pair TType CContract))
>> > )
>> > ))
>> >
>> > And then I try to look something up in it:
>> >
>> > ( hash-ref vector-to-contract (cast '_bytes TType) (cast 'other CContract))
>> >
>> > and I am informed that I cannot, it seems, look up a value of type
>> > TType in a hastable whose type indicates it looks up things of type
>> > TType:
>> >
>> > Type Checker: Polymorphic function `hash-ref' could not be applied to 
>> > arguments:
>> > Types: HashTableTop a (-> c) -> Any
>> > HashTableTop a False -> Any
>> > HashTableTop a -> Any
>> > Arguments: (HashTable TType CContract) TType CContract
>> > Expected result: AnyValues
>> > in: (hash-ref vector-to-contract (cast (quote _bytes) TType) (cast
>> > (quote other) CContract))
>> >
>> >
>> > How *does* one use hashtables in typed Racket?
>> >
>> > -- hendrik
>> >
>> > --
>> > You received this message because you are subscribed to the Google Groups 
>> > "Racket Users" group.
>> > To unsubscribe from this group and stop receiving emails from it, send an 
>> > email to racket-users...@googlegroups.com.
>> > To view this discussion on the web visit 
>> > https://groups.google.com/d/msgid/racket-users/20200421143453.lauuqi3pb4fdgyhh%40topoi.pooq.com.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to racket-users+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/racket-users/aacb7226-8a0e-4fe0-9481-c1f72143eec2n%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CAK%3DHD%2BZZU4mNFX1XnfFXYxHjv8baaPw%3DZ%3D-ArO4tNhE%3D7VKqzQ%40mail.gmail.com.

Reply via email to