【发布时间】:2015-08-04 22:35:23
【问题描述】:
我正在用 monad 包装器在 Alex 中编写一个词法分析器。它的行为不像我预期的那样,我想为它写一些单元测试。我可以编写单元测试来对单个标记进行词法分析:
runAlex "foo" alexMonadScan `shouldBe` Right TokenFoo
但我不知道如何测试字符串“foo bar”是否被解析为[TokenFoo, TokenBar]。
鉴于Token 是我的令牌类型,我需要一个类似runAlex 的函数,其类型为String -> Alex [Token] -> Either String [Token],但我不知道如何转换alexMonadScan 使其具有@ 类型987654327@ 而不是Alex Token。
我试过了
runAlex "foo bar" (liftM (:[]) alexMonadScan) `shouldBe` [TokenFoo, TokenBar]
这似乎有正确的类型,但它返回Right [TokenEOF],显然丢弃了它沿途看到的令牌。
我怎样才能做到这一点?
【问题讨论】:
-
请不要对我进行单元测试,这让我感到不舒服。
-
@AlexM。为什么?你有什么要隐藏的吗?
-
@ʎǝɹɟɟɟǝſ 我-不是那样的。
标签: unit-testing haskell monads lexer