#lang typed/racket (provide Article make-article article? article-id article-timestamp article-hash article-title article-body Article-With-Tags make-article-with-tags article-with-tags? (rename-out [article-with-tags-tags article-tags]) article->article-with-tags) (struct article ([id : String] [timestamp : date] [hash : String] [title : String] [body : String]) #:type-name Article #:constructor-name make-article #:transparent) (struct article-with-tags article ([tags : (Listof String)]) #:type-name Article-With-Tags #:constructor-name make-article-with-tags #:transparent) (: article->article-with-tags (-> Article (Listof String) Article-With-Tags)) (define (article->article-with-tags a tags) (make-article-with-tags (article-id a) (article-timestamp a) (article-hash a) (article-title a) (article-body a) tags))