And use contracts. I can't claim that all my code uses contracts everywhere, but when I encounter unexpected/bewildering behavior I add contracts to break those chains of "piped functions". You can start with define/contract for ease of use.
Later on you can put functions that belong together in one module and test that they work as expected. Then use (provide (contract-out ...)) to put contracts on the exposed functions, structs, etc. to make sure that they can't be used with unexpected values from the outside. This way your module can have internal invariants which can't be broken from the outside. Simon -- 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/f2bd097c-5718-4ead-b497-7703942af12b%40googlegroups.com.