When struct defs are short and sweet, I put them at the top.
If I want to stick strictly to the suggestion, I act like this: #lang racket ;; here are the data i work with (define world/c (flat-named-contract 'world (lambda (x) (world? x)))) (define prime/c (and/c number? (lambda (x) #true))) ;; here are the services I provide (provide/contract [world/c contract?] [change-world (-> world/c prime/c world/c)]) ;; here is how the services are implemented (struct world (dot)) (define (change-world w p) (world p)) ;; --- Note that this guideline reflects a personal preference. There are probably Racketeers who consider it stupid or something like that. I find it important to list first what data I deal with and what services I provide (formulated in terms of data/contracts). The implementation is something I shouldn't have to read. Personally, I'd love to see even more of a separation between the header (data + provide) and the implementation. Perhaps I read too much Modula 2 code, perhaps I liked units too much. -- Matthias On Sep 22, 2011, at 12:00 PM, Doug Williams wrote: > Matthias, > > In the style guide it suggests requires, auxiliary concepts related to the > contracts, provide/contract, and then the body of the module. One problem I > have is that I often use structs to define new data types and use the > resulting structure type predicate - <type name>? - in many contracts. This > forces the provide/contract to be at (or near) the bottom of the module. So, > I had just started putting it there all the time. [The provide/contract seems > to require the 'auxiliary concepts' to already be defined.] > > Would it be better for me to define a <type name>/c flat-named contract for > the struct and move it back to the top? I assume I can use a forward > reference to a module variable - i.e., <type name>? - in the > named-flat-contract. > > Doug > > On Wed, Sep 14, 2011 at 6:47 PM, Matthias Felleisen <matth...@ccs.neu.edu> > wrote: > > > For the past few months, I have been writing a style guide for new Racket > PLTers. The current draft is available at > > http://www.ccs.neu.edu/home/matthias/Style/style/ > > I had hoped to complete it a bit more and polish it a bit more, but this > discussion suggests that people might be interested in reading it and > commenting on it. > > -- Matthias > > > _________________________________________________ > For list-related administrative tasks: > http://lists.racket-lang.org/listinfo/users > _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users