Have you or someone you know [1] ever thought: "Gee, I wish Typed Racket could figure out that ___ has type ___. It's pretty obvious to me."
Then the new "trivial" [2] library is here to help. If you're using basic arithmetic (+, -, *, /), format strings, or regexp-match, just add a colon to the end of your favorite operator. When a strong type really is obvious, you win! (require trivial/regexp) (cond [(regexp-match: #rx"f(o*)" "foobar") => (lambda ([m : (List String String)]) (cadr m))] [else "no match"]) Please send bugs & feature requests to the issue tracker [3]. The tracker's also a good place to complain about the choice of the name "trivial" or the colon notation. [1] https://groups.google.com/forum/#!topic/racket-users/BfA0jsXrioo [2] http://pkg-build.racket-lang.org/doc/trivial/index.html [3] https://github.com/bennn/trivial/issues ;; --- More Examples *Before*: (+ 1 (if (= 0 (- 2 2)) 1 "x")) ;; expected: Number, given: (U String One) (printf "hello ~a") ;; raises runtime error (ann (regexp-match "f(o*)" "foobar") (U #f (List String String))) ;; Type Error, got type ;; (U #f (Pairof String (Listof (U False String)))) *After* adding (require trivial): (+ 1 (if (= 0 (-: 2 2)) 1 "x")) ;; Success! (printf: "hello ~a") ;; Compile-time error (ann (regexp-match "f(o*)" "foobar") (U #f (List String String))) ;; Success! If a strong type isn't clear from the call site, you get standard Typed Racket types. (let ([n 2]) (-: n 2)) ;; Type: Integer ((lambda ([f : (-> String Void)]) (f "~b" 'NaN)) printf:) ;; Runtime error (regexp-match: "f(o*)|bar" "foo") ;; Type: (U #f (Pairof String (Listof (U #f String)))) One more thing: there's a special form for compiling regular expression patterns: (define-regexp: my-pat #rx"f(o*)") ;; Also supports pregexp, byte-regexp, byte-pregexp (ann (regexp-match: my-pat "") (U #f (List String String))) ;; Success! -- 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. For more options, visit https://groups.google.com/d/optout.