2016-06-17 63 views
0

使用三連擊庫,我應該能夠解析不包含結尾字母整型字符串和返回解析的整數解析器解析整數返回整數>> EOF使用綁定

Prelude> parseString (yourFuncHere) mempty "123" 
Success 123 
Prelude> parseString (yourFuncHere) mempty "123abc" 
Failure (interactive):1:4: error: expected: digit, 
    end of input 
123abc<EOF> 

我有之所以能做到這一點使用做記號像這樣:

x <- decimal 
eof 
return x 

但我一直在翻譯這個綁定/ lambda表達式不成功。

這不守解析的數量,但在其他方面正確的:

decimal >> eof 

我想我應該這樣開始

decimal >>= \x -> eof 

,但在此之後,每次我都試過排列不起作用。如何返回解析的數字並使用綁定語法來檢查eof而不是?

+3

您應該可以使用Applicative實例而不是Monad實例:'decimal <* eof'。 – amalloy

回答

3

你需要做的

decimal >>= (\x -> (eof >> return x)) 

eof組合子不返回任何東西,所以你必須返回你想要自己的東西。

+0

如果您需要用'>> =' – ErikR

+0

完全寫入,'a >> b'與'a >> =(\ _ - > b)''相同'謝謝。從來沒有看到過一個回合之外的回報。 –

+0

@TheUnfunCat記住return只是Haskell中的一個函數,編譯器沒有什麼特別之處。您可以像使用其他功能一樣使用它。 – bheklilr