Я пишу лексер в Алеке с обложкой монады. Это не так, как я ожидаю, и я хотел бы написать для него некоторые модульные тесты. Я могу писать тесты для Lexing один маркер, выполнив:Как я могу проверить код Alex?
runAlex "foo" alexMonadScan `shouldBe` Right TokenFoo
, но я не знаю, как проверить, что строка «Foo бар» получает lexed к [TokenFoo, TokenBar]
.
Учитывая, что Token
мой тип лексемы, я бы нужна функция, как runAlex
, которая имеет тип String -> Alex [Token] -> Either String [Token]
, но я не знаю, как превратить alexMonadScan
так, что она имеет тип Alex [Token]
, а не Alex Token
.
Я попытался
runAlex "foo bar" (liftM (:[]) alexMonadScan) `shouldBe` [TokenFoo, TokenBar]
, который, кажется, имеет правильный тип, но он возвращает Right [TokenEOF]
, видимо, сбросив жетоны он видел по пути.
Как я могу это достичь?
Пожалуйста, не блок испытай меня, это заставляет меня чувствовать себя некомфортно. –
@ AlexM. Зачем? У вас есть что скрывать? – Shoe
@ ʎǝɹɟɟɟǝs I-это не так. –