Я пытаюсь загрузить и использовать функцию из другого модуля во время выполнения.Проблема в том, что диапазон dynamic-require
, Any
, не может выглядеть как cast
для более определенного (функционального) типа.
test.rkt:
#lang typed/racket
(module other-module typed/racket
(provide f)
(: f : Integer -> Integer)
(define (f x)
(* x 2)))
; g has type Any because dynamic-require returns a value of type Any
(define g (dynamic-require '(submod "test.rkt" other-module) 'f))
;contract violation
; Attempted to use a higher-order value passed as `Any` in untyped code: #<procedure:f>
; in: Any
; contract from: typed-world
; blaming: cast
; (assuming the contract is correct)
((cast g (-> Integer Integer)) 3)
Есть ли способ загрузить и использовать функцию во время выполнения из другого модуля в #lang typed/racket
?