我可以使用monad定义它们。
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("GET"), "http://192.168.1.1/"))
{
var response = await httpClient.SendAsync(request);
}
}
(<*) :: Monad m => m a -> m b -> m a
(<*) fa fb = fa >>= \a -> (fb >>= \_ -> return a)
(<*) fa fb = ??? -- In terms of pure & (<*>)
(*>) :: Monad m => m a -> m b -> m b
(*>) fa fb = fa >>= \_ -> (fb >>= \b -> return b)
(*>) fa fb = ??? -- In terms of pure & (<*>)
和(\*>)
被视为排序运算符。我可以安全地假设Applicatives可以在顺序和并行两种方式下工作吗? Monad只是应用程序的一个子类别,仅能按顺序执行事务。而且,即使像阅读器monad之类的少数monad的操作顺序无关紧要(例如,从(<\*)
环境设置中读取配置),
答案 0 :(得分:4)
标准定义是
(<*) :: Applicative m => m a -> m b -> m a
(<*) fa fb = (\a _ -> a) <$> fa <*> fb
然后我们可以应用法律f <$> x = pure f <*> x
仅使用<*>
和pure
。
另一个类似。