- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面的代码中,还有没有更多惯用的方式来编写checks
函数?
该模式感觉很像(<|>)
应该在这里工作,但是使用
checks s = check1 s <|> check2 s <|> throwError "..."
instance Error ByteString
。
{-# LANGUAGE OverloadedStrings #-}
module Bar where
import Data.ByteString.Char8 (ByteString)
import qualified Data.ByteString.Char8 as BS
import Control.Monad
import Control.Applicative
import Control.Monad.Error
import Data.Monoid
check1 str =
if str == "abc"
then return 1
else throwError ("not equal to abc" :: ByteString)
check2 str =
if str == "def"
then return 2
else throwError ("not equal to def" :: ByteString)
checks str = (check1 str)
`catchError` (const (check2 str))
`catchError` (const (throwError "not abc or def"))
main :: IO ()
main = do
input <- BS.getLine
case checks input of
Left e -> BS.putStrLn $ "Error: " <> e
Right a -> BS.putStrLn "OK"
最佳答案
Alternative
的Either
实例使用Error
约束来生成empty :: Alternative f => f a
的值。在这种情况下,它会执行类似于empty = Left noMsg :: Error e => Either e a
的操作。由于实际上使用<|>
并不需要错误实例,因此,如果您想要不带<|>
的empty
,则可以从半群中使用 Data.Functor.Alt.Alt
。
但是,ExceptT
或Control.Monad.Except
中的Control.Monad.Trans.Except
使用更明智的Monoid
约束,而Bytestring
已经是Monoid
。我认为现在不建议使用ErrorT
。您可能还想使用Bytestring
的列表作为错误类型,否则Bytestring
会被串联在一起且没有空格。
{-# LANGUAGE OverloadedStrings #-}
module Bar where
import Data.ByteString.Char8 (ByteString)
import qualified Data.ByteString.Char8 as BS
import Control.Monad
import Control.Applicative
import Control.Monad.Trans.Except
import Data.Monoid
check1 str =
if str == "abc"
then return 1
else throwE ["not equal to abc" ]
check2 str =
if str == "def"
then return 2
else throwE ["not equal to def" ]
checks str = check1 str <|> check2 str <|> throwE ["not abc or def"]
main :: IO ()
main = do
input <- BS.getLine
case runExcept $ checks input of
Left e -> mapM_ (BS.putStrLn . ("Error: " <>)) e
Right a -> print a
关于haskell - 用 `catchError`写一串 `(<|>)` -s吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31108139/
我尝试使用 Angular Material 分页器和排序,并从 material.angular.io 示例中获取一些代码。这部分: ngOnInit() { this.exampleDat
如何在我的 Angular Testing 中覆盖 catchError? this.service.method().pipe( tap(ret=>{ console.log('my re
这是我之前问题的后续: Set a stage status in Jenkins Pipelines 事实证明,我可以将管道保持为成功,但如果我愿意,可以通过 catchError 将单个阶段标记为
我写了一个函数pipe -有能力的: HandleHttpBasicError() { return ((source:Observable) => { return sour
我想知道是否有人可以告诉我如何实现 Flutter StreamProvider“catchError”属性? 下面的示例代码添加到: StreamProvider.value( initia
寻求帮助在 Angular HttpClient 获取请求中捕获 HTTP 错误,并将其传递回发起请求的组件,以便以消费者友好的方式处理错误。 我的 Angular 7 应用程序有一个报告模块,我正在
我有一些Future代码,如下所示: return login().then((user) { print("Logged in user ${user.name}"); return
最小可重现代码: Future foo() async => throw Future.error('Foo'); void main() { foo().catchError(print); }
考虑这段代码: 示例 A: Future fakeCall() async { await Future.delayed(const Duration(milliseconds: 300), ()
最小可重现代码: Future foo() async => throw Future.error('Foo'); void main() { foo().catchError(print); }
考虑这段代码: 示例 A: Future fakeCall() async { await Future.delayed(const Duration(milliseconds: 300), ()
我有一个 UITableView,它由使用 RxSwift 的响应式(Reactive) View 模型填充,分页和刷新运行良好。 viewModel.dataSource() 正在使用我的 API,
我正在尝试为已链接 rxjs catchError 运算符的 @Effect 编写 jasmine 测试,但我正在努力测试第一个 catchError 之外的任何可观察值。 这是效果: @Effect
我在某些组件中有请求,例如通过点击: performRequest() { const request = this.http .get('https://randomfox.ca
CatchError 在 401 响应中被完全忽略。 我有处理 oauth2 身份验证的 httpInterceptor。 相关代码是: import { filter, take, switchMa
我不确定这种类型的错误处理和抽象是否以错误的方式完成。 Future _refresh() { return Future(() => throw someError) .catch
我正在尝试使用 Angular 大学提供的优秀示例来实现 Angular 数据表。但我坚持实现我的数据源。这是我的数据源: import { Aircraft } from '../shared/ai
在下面的代码中,还有没有更多惯用的方式来编写checks函数? 该模式感觉很像()应该在这里工作,但是使用 checks s = check1 s check2 s throwError "...
我这样称呼 future : //main_bloc.dart ... getData() { print("getting data"); repositor
我正在运行 Angular 教程,但我无法理解某一部分实际发生的情况。我通过搜索找到了一些例子,但没有具体回答这个问题。这是代码: getHeroes (): Observable { retur
我是一名优秀的程序员,十分优秀!