The toplevel is hopeless - racket/racket GitHub Wiki

If you hear the phrase "The toplevel is hopeless", the speaker is refering to a number of issues with the toplevel (often the repl). There are several issues, but boil down to a clash of expections of program behaviour in the repl vs inside a module.

A series of posts and discussions on the topic can be found here:

https://gist.github.com/samth/3083053

Quotes from Racket Discord: https://discord.com/channels/571040468092321801/618895179343986688/882681095630499850

it's basically that the top-level is hopeless -- interactive redefinition can't be given a consistent semantics

The reason the top-level is hopeless is that when you macro-expand some expression, you have to already know what references in that expression are reference to macros. But if you allow subsequent things to define macros that you might have referred to (either through re-definition or because you referenced something that was not yet defined) then you can't know whether something is a macro, because that decision is made in the future.

Here's an example of the semantics not making sense:”

[samth@huor:~/sw/plt (master) plt] r
Welcome to Racket v8.2.0.7 [cs].
> (define (f x) (g x))
> (define/contract (g x) (-> any/c any/c) x)
> (f 1)
; g: undefined;
;  cannot reference an identifier before its definition
;   in module: top-level
; [,bt for context]