2
私はHaskellにパーサを書き込もうとしています。この場合、少なくとも1の長さの文字列を解析する関数が必要です。以下に宣言する型があります。少なくとも1文字の長さの文字列を解析します。
type Pname = String
私の持つ機能は動作しません。
pname :: Parser Pname
pname = (some ['a' .. 'z']) <* sc
が、それは私にエラー与える::
をsc
が空白とコメント(私はこのパーサで助けを求め
https://mrkkrp.github.io/megaparsec/tutorials/parsing-simple-imperative-language.htmlでチュートリアル以下となっている)のための私のスペース、消費者がどこにあるか私が持っているコードは、以下の通りです
Couldn't match type ‘[]’
with ‘ParsecT Dec String Data.Functor.Identity.Identity’
Expected type: ParsecT
Dec String Data.Functor.Identity.Identity Char
Actual type: [Char]
In the first argument of ‘some’, namely ‘['a' .. 'z']’
In the first argument of ‘(<*)’, namely ‘(some ['a' .. 'z'])’
In the expression: (some ['a' .. 'z']) <* sc
これはなぜ機能しないのですか?
1つ以上の文字を受け入れる必要があるため、oneOfが適しているとは思われません。 –
@datguywelbz 'oneOf ['a' .. 'z']'は正確に1文字を受け取ります。 'some(oneOf ['a' .. 'z'])'は1つ以上を受け入れます([some'のためのドキュメンテーション](https://hackage.haskell.org/package/base-4.9.1.0/)を参照してください。 docs/Control-Applicative.html#v:some))。 –