I need to seed rng with a string
Are there any hashing functions in racket?
I see there is eq-hash-code
, is there also a hash-code
function?
Ah nevermind, I misunderstood what equal-hash-code
does. It is what I was looking for.
Here’s the macro I tried from yesterday using define-simple-macro
after some sleep and a fresh pot of :coffee: (define-simple-macro (stateful-cell (~seq (~seq #:dependency u:id e:id) ...) body:expr ...+)
#'(make-stateful-cell (λ () (let ([u e] ...) body ...))))
Right now I’m trying to figure out how to adjust the error message such that this invalid use provides an error complaining about a body being missing, as opposed to the head pattern not having enough terms. main.rkt> (stateful-cell #:dependency aa a #:dependency bb b)
; stdin::1415-1461: stateful-cell: expected more terms starting with the literal #:dependency or expression
Two options. Option 1 - Change your pattern from body:expr ...+
to body:expr ...
. And then manually check to see if body
is empty. Option 2 - Use syntax-parse and add an extra clause [(stateful-cell (~seq (~seq #:dependency u:id e:id) ...) (raise-syntax-error ...)]
.
This looks like a bug in syntax-parse
to me…
@soegaard2 I’d probably go with Option 2 just to keep the same mode of writing.
Here’s where I finally landed:
(define-syntax (stateful-cell stx)
(syntax-parse stx
#:context #'stateful-cell
[(stateful-cell datum:expr)
#'(make-stateful-cell (λ () datum))]
[(stateful-cell (~seq (~seq #:dependency u:id e:id) ...) body:expr ...+)
#'(make-stateful-cell (λ () (let ([u e] ...) body ...)))]
[(stateful-cell (~seq (~seq #:dependency u:id e:id) ...))
(raise-syntax-error 'stateful-cell
"Expected body after dependency bindings"
stx)]))
I think you don’t need the outer ~seq
(stateful-cell (~seq #:dependency u:id e:id) ... body:expr ...+)
Also, you can make a (splicing) syntax class for the dependency bindings and give that class a #:description
. That will give you higher-level error messages.
Hi everyone, I have two types (define-type (Listof^ A)
(U Null (Pairof A (Listof^ A))))
(define-type (Listof^^ A)
(Rec x (U Null (Pairof A x))))
I thought they were equivalent to (All (A) (ListOf A))
but it turns out only the second one is equivalent to (All (A) (ListOf A))
Does anyone have a clue?
Those look like they should be equivalent
(: x (Listof^ Number))
(define x '(1 2 3))
(length x)
the code above doesn’t type check, but the following does: (: y (Listof^^ Number))
(define y '(1 2 3))
(length y)
maybe this is a bug I should assign to myself…..
@mflatt I just started to make a PR to delete those two bullets — and possibly also the two bullets for 'module-direct-for-{template meta}-requires
. But I notice that the doc for 'module-body-context-simple?
links to all four of them. I’m guessing that means it’s also obsolete, and I should delete all five.
If you know off-hand, please let me know. Otherwise I guess I can just go ahead and make the PR deleting all five — and you all can not merge it if it’s wrong?
Just curious — how does typed racket handle (Listof^ A)
in (U Null (Pairof A (Listof^ A)))
? Does it instantiate the (All (A) ...)
with the outer type variable (the outer A
)?
'module-body-context
, 'module-body-inside-context
, and 'module-body-context-simple?
are the three properties that are still provided. It seems like 'module-body-context-simple?
would not be useful without those other properties that are gone, but maybe I’ve forgotten something.
OK, I’ll attempt to rewrite 'module-body-simple?
to remove the links and submit a PR.
I haven’t looked into the implementation of define-type
But I don’t think there is any instantiation happening.
Okay. It just occurs to me that if (define-type (T A) e)
is exactly the same as (define-type T (All (A) e))
, then the forall quantifier and the recursive reference to T
occurs in different order between two definitions
I don’t know TR internals so this might just be totally irrelevent
maybe the order is the same? since T
can appear in e
in both of your type definitions
Awesome, thank you so much for your patience on this. PR coming within the hour.
one is (define-type Listof^
(All (A)
(U Null (Pairof A (Listof^ A)))))
the other is (define-type Listof^^
(All (A)
(Rec x ...A x...)))
So it’s like whether that extra syntactic level of All
in recursion would affect TR’s type inference algorithm
Oh, I got you wrong.
I thought you were talking about (define-type (Listof^ A)
(U Null (Pairof A (Listof^ A))))
(define-type Listof^
(All (A)
(U Null (Pairof A (Listof^ A)))))
Ah, make sense!
thank you!
Looks interesting! Mallku Soldevila et al made a Redex model for Lua in Dynamic Language Symposium 2017 https://github.com/Mallku2/lua-redex-model https://arxiv.org/pdf/1706.02400v1.pdf
No need to rush :) I do have a day job and plenty of other hobbies
Understood. I’ll keep things moving here. Please open a new issue if something needs addressing post merge!
I’m curious about building custom Racket distributions to distribute a few extra packages to my colleagues on top of a released main-distribution
. It looks like the make client-from-site
target 1 might be what I want, but I’m not completely clear how to “drive” building a derived distribution site or how it interacts with distro-build
. I’m also not sure about code signing: the best-case scenario would be for Racket’s signature on the official release to still hold, but I don’t have enough experience with code signing in general to be clear about that.
@philip.mcgrath Is asking them to run raco pkg install
out of the question? The custom distribution thing seems like a lot of work (I didn’t even know you could do that)