在文学式编程中,是否可以使用其他#lang?
例如,我想在#lang scribble/lp中使用#lang typed/racket。如何实现?
在文学式编程中,是否可以使用其他#lang?
例如,我想在#lang scribble/lp中使用#lang typed/racket。如何实现?
scribble/lp2
,它允许您指定底层模块语言。
由于一个问题,您需要将整个内容包装在(begin …)
中,尽管已经有一个拉取请求即将修复此问题。
#lang scribble/lp2
@chunk[<*>
(begin
(module main typed/racket
(define a : Number 1)
(provide a)
(module moo racket/base '…)
(module+ test
(require typed/rackunit)
(check-equal? a (+ 1/2 1/2))))
(require 'main)
(provide (all-from-out 'main))
(module test typed/racket
(require (submod ".." main test))))]
test
模块放在main
中,因为它不会被执行。在这里,我在main
中有一个(module+ test …)
,并且它被一个根级别的test
模块所需。如果在根目录中注释掉(module test
,则测试将不会被执行。moo
时,同样也需要注意,您必须使用(require (submod "myfile.lp2.typed.rkt" main moo))
,或者像上面为test
和main
所做的那样创建一个“别名”。(begin-for-syntax (displayln 'executed))
来查看这一点,它会被打印多次。master
中。test/test.hl.rkt
中有 一个更完整的例子:#lang hyper-literate/typed typed/racket/base
@(require (for-label typed/racket/base
typed/rackunit))
@title{Title}
Hello world.
@chunk[<*>
(require typed/rackunit)
;; Would give an error as typed/racket/base is used on the #lang line:
;curry
(check-equal? ((make-predicate One) 1) #t)
(define (f [x : 'e123]) x)
(define ee (ann (f 'e123) 'e123))
(provide ee)]
看起来不是这样,但你可以使用带有 scribble/eval 的类型化/racket 评估器。
#lang scribble/manual
@(require racket/sandbox
scribble/eval)
@(define my-evaluator
(parameterize ([sandbox-output 'string]
[sandbox-error-output 'string])
(make-evaluator 'typed/racket/base)))
@interaction[#:eval my-evaluator
(: my-sqr (Real -> Real))
(define (my-sqr x)
(* x x))
(my-sqr 42)]
从这里获取的示例。