Я использую lang pl для этого.
У меня есть следующие типы данных:
(define-type RES
[RES_Bool Boolean]
[RegV Bit-List]
[FunV Symbol RegE])
и эти 2 функции:
(: RegV->bit-list : RES -> Bit-List)
;; extract a bit-list from RES type
(define (RegV->bit-list r)
(cases r
[(RegV bl) bl]
[else (error 'RegV->bit-list "Given wrong type of RES" r)]
)
)
(: RegV->boolean : RES -> Boolean)
;; extract a boolean from RES type
(define(RegV->boolean res)
(cases res
[(RES_Bool b) b]
[else (error 'RegV->boolean "Given wrong type of RES ~s" res)]))
Я хочу написать новую функцию для [FunV Symbol RegE]
Я пыталсясделайте это так:
(: RegV->RegE : RES -> RegE)
;; extract a RegE from RES type
(define(RegV->RegE res)
(cases res
[(FunV Symbol RegE) RegE]
[else (error 'RegV->RegE "Given wrong type of RES ~s" res)]))
но это не сработает, любая помощь будет оценена