1

trifecta ライブラリを使用して、末尾の文字を含まない整数文字列を解析し、解析された整数返すことになっています。

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

次のように do 表記を使用してこれを行うことができました。

x <- decimal
eof
return x

しかし、これをバインド/ラムダに変換することに失敗しました。

これは解析された数値を保持しませんが、それ以外は正しいです:

decimal >> eof

私はこのように始めるべきだと思います

decimal >>= \x -> eof

しかし、この後、私が試したすべての順列は機能しません。解析された数値を返し、do の代わりに bind 構文を使用して eof をチェックするにはどうすればよいですか?

4

1 に答える 1

4

あなたがする必要があるでしょう

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

eofコンビネータは何も返さないので、自分で欲しいものを返す必要があります。

于 2016-06-17T21:50:11.890 に答える