diff --git a/src/HTTP/Response.js b/src/HTTP/Response.js index 54cf4ee..2077eb2 100644 --- a/src/HTTP/Response.js +++ b/src/HTTP/Response.js @@ -1,5 +1,8 @@ /// +/** @type {(_: Response) => () => Response} */ +export const cloneImpl = rep => () => rep.clone() + /** @type {(_: Response) => () => Promise} */ export const jsonImpl = rep => () => rep.json() diff --git a/src/HTTP/Response.purs b/src/HTTP/Response.purs index 9ce0964..92f1d6a 100644 --- a/src/HTTP/Response.purs +++ b/src/HTTP/Response.purs @@ -1,5 +1,6 @@ module HTTP.Response ( Response(..) + , clone , json , text , blob @@ -36,6 +37,7 @@ import Web.File.Blob (Blob) foreign import data Response :: Type +foreign import cloneImpl :: Response -> Effect Response foreign import statusImpl :: Response -> Effect Int foreign import statusTextImpl :: Response -> Effect String foreign import headersImpl :: Response -> Effect (Object String) @@ -54,6 +56,9 @@ guardStatusOk rep = do else pure unit +clone :: forall m. MonadEffect m => Response -> m Response +clone = liftEffect <<< cloneImpl + json :: forall m @a. MonadAff m => ReadForeign a => Response -> m a json = liftAff <<< flip bind (liftEither <<< lmap (error <<< show) <<< runExcept <<< readImpl) <<< Promise.toAffE <<< jsonImpl