Есть ли способ написать это более кратко? У меня есть много функций, которые выглядят так. У каждого из них есть некоторое логическое условие, которое либо возвращает значение, либо Nothing
rootMiddleware :: Application -> Application
rootMiddleware app req respond =
fromMaybe next . fmap respond $
serveIndex ["questionnaire"] "../app/answer/answer.html" req
<|> serveIndex ["survey"] "../app/builder/builder.html" req
<|> redirect [] "/survey/forms" req
where
next = app req respond
serveIndex :: [Text] -> FilePath -> Request -> Maybe Response
serveIndex prefix fp req =
if prefix `isPrefixOf` pathInfo req
then Just $ responseFile status200 [("Content-Type", "text/html")] fp Nothing
else Nothing
redirect :: [Text] -> ByteString -> Request -> Maybe Response
redirect pathParts url req =
if pathParts == pathInfo req
then Just $ redirectTo url
else Nothing
when
действительно близко, но это не позволяет вам вернуть значение в аппликативе. Есть ли что-то эквивалентное для этого случая?
bool :: Bool -> a -> a -> a
вместоif .. then .. else
, если вы находите это более привлекательным. - person cdk   schedule 26.10.2015