define-type と type-case は plai スキームで提供されていますが、何らかの理由で typed/racket には存在しません。マクロを使用して、これらの構造をラケットに実装したいと考えています。
マクロ「def-user-type」を作成したいのですが、使用したい構文は次のとおりです
(def-user-type Shape
[Rectangle ((l Number) (b Number))]
[Circle ((r radius))]
[Blah (())])
そして、大まかに次のように動作する必要があります
(define-type Shape (U Rectangle Circle Blah))
(struct: Rectangle ([l : Number] [b Number]))
(struct: Circle ([r : Number]))
(struct: Blah ())
これが私がこれまでに達成したことです。これは誤りであり、ラケット コンパイラによって表示されるエラー メッセージも役に立ちません。
#lang typed/racket
(define-syntax define-user-type
(syntax-rules()
[(define-user-type type-name
[sub-type ((field-name type) ...)]
...)
((define-type type-name (U sub-type ...))
(struct: sub-type ([field-name : type] ...))
...)]))
私を案内してください。ありがとう!