You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sugar/typed/sugar/len.rkt

19 lines
686 B
Racket

9 years ago
#lang typed/racket/base
10 years ago
(require racket/set racket/sequence)
9 years ago
(require typed/sugar/define)
9 years ago
(provide Lengthable)
(define-type Lengthable (U (Listof Any) String Symbol Path (Vectorof Any) HashTableTop (Setof Any) (Sequenceof Any)))
9 years ago
(define/typed+provide (len x)
(Lengthable -> Nonnegative-Integer)
(cond
[(list? x) (length x)]
[(string? x) (string-length x)]
[(symbol? x) (len (symbol->string x))]
[(path? x) (len (path->string x))]
10 years ago
[(vector? x) (vector-length x)]
[(hash? x) (len (hash-keys x))]
10 years ago
[(set? x) (len (set->list x))]
10 years ago
[(and (sequence? x) (not (integer? x))) (len (sequence->list x))]
[else (error "len: cant calculate length of" x)]))