Каков синтаксис использования нескольких обработчиков в Happstack?

Извините за мой основной вопрос, но я новичок в Haskell.

Я использую этот пример, чтобы получить некоторые значения из тела запроса, но мой сервер также обслуживает статические файлы из каталога, используя следующий код:

fileServing :: ServerPart Response
fileServing = serveDirectory EnableBrowsing ["index.html"] "./Path/"

mainFunc = simpleHTTP nullConf $ msum [ 
                                        fileServing                                     
                                      ]

Я добавил приведенный ниже код в свою библиотеку, но не знаю, где использовать функцию handlers, потому что у меня уже есть msum в файле mainFunc.

handlers :: ServerPart Response
handlers =
    do decodeBody myPolicy
       msum [ 
               myGetData
            ]

myGetData :: ServerPart Response
myGetData =
    do method POST
       username <- look "username"
       password <- look "password"
       ok $ toResponse (username ++ ", " ++ password)

person asp    schedule 12.02.2018    source источник


Ответы (1)


fileServing, myGetData, msum [fileServing], msum [myGetData] и handlers все имеют тип ServerPart Response, который является типом того, что вы передаете simpleHTTP nullConf в mainFunc. Раз так, вы, вероятно, хотите...

mainFunc = simpleHTTP nullConf handlers

-- etc.

handlers :: ServerPart Response
handlers =
    do decodeBody myPolicy
       msum [ fileServing
            , myGetData
            ]

msum здесь объединяет список обработчиков в один обработчик (обратите внимание, что это также означает, что msum в списке с одним обработчиком является избыточным).

person duplode    schedule 12.02.2018
comment
Большое спасибо и извините за опоздание с принятием вашего ответа. (Мне было трудно войти в свою учетную запись!!) - person asp; 14.02.2018
comment
@asp Не беспокойся :) - person duplode; 14.02.2018