Permitindo solicitações de origem cruzada em Yesod

Meu aplicativo usa um bookmarklet e preciso permitir o CORS paraMyRouteR então meu código de bookmarklet pode usar esta rota para solicitações de AJAX.

No meu primeiro rascunho de config / routes eu deiMyRouteR suporte para apenas um método de solicitação, PUT. Mas acabou (duh) que eu precisaria suportar também o método OPTIONS, que navegadores usam para solicitações de preflight do CORS.

Acabei com o seguinte em config / routes:

/myroute MyRouteR PUT OPTIONS

Eu meio que esperava que houvesse alguma maquinaria relevante no Template Haskell que processe config / routes para que a adição de OPTIONS à lista de métodos dessa rota resultasse automaticamente no suporte a CORS, mas sem dados. Não é o fim do mundo, mas faria sentido e seria elegante assim.

Para fazer o CORS funcionar, eu dei à rota um manipulador OPTIONS:

optionsMyRouteR :: Handler RepPlain
optionsMyRouteR = do
    addHeader "Access-Control-Allow-Origin" "*"
    addHeader "Access-Control-Allow-Methods" "PUT, OPTIONS"
    return $ RepPlain $ toContent ("" :: Text)

putMyRouteR :: Handler RepJson
putMyRouteR = do
    addHeader "Access-Control-Allow-Origin" "*"
    -- more stuff ...

Isso funciona, mas parece um pouco não-simódico porque é tão clichê. Então, duas perguntas:

Temos um adjetivo melhor que o Yesodico?Existe outra maneira melhor de permitir que uma rota ofereça suporte a solicitações de origem cruzada?

questionAnswers(1)

yourAnswerToTheQuestion