( Abortion(..)
, abort -- MonadIO m => StatusCode -> [ (String, String) ] -> Maybe String -> m a
, abortSTM -- StatusCode -> [ (String, String) ] -> Maybe String -> STM a
- , abortA -- ArrowIO a => StatusCode -> [ (String, String) ] -> Maybe String -> a b c
+ , abortA -- ArrowIO a => a (StatusCode, ([ (String, String) ], Maybe String)) c
, abortPage -- Config -> Maybe Request -> Maybe Response -> Abortion -> String
)
where
= unsafeIOToSTM $ abort status headers msg
-abortA :: ArrowIO a => StatusCode -> [ (String, String) ] -> Maybe String -> a b c
-abortA status headers msg
- = arrIO0 $ abort status headers msg
+abortA :: ArrowIO a => a (StatusCode, ([ (String, String) ], Maybe String)) c
+abortA
+ = arrIO3 abort
-- aboMessage が Just なら單に mkDefaultPage に渡すだけで良いので樂だが、
-- がある。
abortPage :: Config -> Maybe Request -> Maybe Response -> Abortion -> String
abortPage conf reqM resM abo
- = let msg = case aboMessage abo of
- Just msg -> msg
- Nothing -> let res' = case resM of
- Just res -> res { resStatus = aboStatus abo }
- Nothing -> Response {
- resVersion = HttpVersion 1 1
- , resStatus = aboStatus abo
- , resHeaders = []
- }
- res = foldl (.) id [setHeader name value
- | (name, value) <- aboHeaders abo]
- $ res'
- in
- getDefaultPage conf reqM res
- [html] = unsafePerformIO
- $ runX ( mkDefaultPage conf (aboStatus abo) (txt msg)
- >>>
- writeDocumentToString [(a_indent, v_1)]
- )
- in
- html
+ = case aboMessage abo of
+ Just msg
+ -> let [html] = unsafePerformIO
+ $ runX ( mkDefaultPage conf (aboStatus abo) (txt msg)
+ >>>
+ writeDocumentToString [(a_indent, v_1)]
+ )
+ in
+ html
+ Nothing
+ -> let res' = case resM of
+ Just res -> res { resStatus = aboStatus abo }
+ Nothing -> Response {
+ resVersion = HttpVersion 1 1
+ , resStatus = aboStatus abo
+ , resHeaders = []
+ }
+ res = foldl (.) id [setHeader name value
+ | (name, value) <- aboHeaders abo]
+ $ res'
+ in
+ getDefaultPage conf reqM res