我很好奇当您期望某种类型作为来自 fetch / Axios / 等的响应并且其响应是不同类型时会发生什么。我可以检测到这种不匹配吗?
interface HttpResponse<T> extends Response {
parsedBody?: T;
}
export async function http<T>( request: RequestInfo ): Promise<HttpResponse<T>> {
const response: HttpResponse<T> = await fetch( request );
response.parsedBody = await response.json();
return response;
}
// example consuming code
const response = await http<number>(
"https://thisURLdoesNotReturnANumber"
);
Run Code Online (Sandbox Code Playgroud)
代码会抛出错误吗?会悄无声息的过去吗?我如何检测不匹配?
Haskell的Prelude中是否存在这样的事情?
wfmap :: Functor f
=> a
-> (a -> b)
-> (b -> a)
-> (b -> f b)
-> f a
wfmap x u w g = fmap (w) (g (u x))
Run Code Online (Sandbox Code Playgroud)
在我正在进行的一个项目中,我经常发现自己"转换"了一种类型,处理它并"转换"它.
我有一个生成Maybe a类型的函数,我在函数中使用它来生成一个Either b a.有没有一种方法,我可以映射Nothing到Left x简化我的代码?以下代码给出了一些上下文:
rmX :: ... -> Maybe a
cvX :: ... -> Either CVXError a
data CVXError = BadIndex | NoCover | NoSpace
cvX ... =
...
case rmx 1 xs of
Nothing -> Left NoSpace
Just p -> Right (x2:x1:(fromJust (rmX (-1) p)))
-- given that rmX always passes on negative value arg
Run Code Online (Sandbox Code Playgroud)
case语句只是乞求被替换fmap,但问题是,我不知道如何"地图" Nothing,以Left NoSpace在fmap通话或甚至提取这种模式让我自己UTIL功能.