#scala #spray #continuations #continuation-passing
#scala #spray #продолжения #продолжение-передача
Вопрос:
Я не вижу, как директивы spray соответствуют стилю передачи продолжения (CPS).
Более конкретно, продолжение есть (a -> r) -> r
(в Haskell), но я не могу найти, где находится этот тип ( (a -> r) -> r
) при использовании директив spray (которые имеют тип Route->Route
where type Route = RequestContext => Unit
).
Ни Route->Route
ни type Route = RequestContext => Unit
то ни (a -> r) -> r
другое не похоже , так как же директивы соотносятся с CPS, не так ли?
Может ли кто-нибудь показать, как директива spray соответствует стилю передачи продолжения?
Ответ №1:
Директива в ее простейшей форме определяется как
abstract class Directive[L <: HList] {
def happly(f: L => Route): Route
}
что в точности является (a -> r) -> r
. То, что вы видите в документации по директивам spray, — это DSL высокого уровня, который создает Directive
экземпляры под капотом. Вы можете увидеть полное определение в Directive.scala