我想爲尖括號中逗號分隔的一對值編寫解析器。我把它用下面的方法工作:適用於具有兩個參數的構造函數的樣式解析器
pair p1 p2 = do
x1 <- p1
comma
x2 <- p2
return (x1, x2)
data Foo = Foo (Bar, Bar)
foo :: Parser Foo
foo = Foo <$> (angles $ pair bar bar)
但是我寧願富構造函數取兩個參數,而不是一個元組:
data Foo = Foo Bar Bar
什麼是寫一個這樣的解析器的最佳方法?理想情況下,我想重複使用標準的Parsec解析器,例如angles
,並儘可能使用應用程序。
此外,對於您有領先令牌忽略的情況,您可以使用類似'Foo <$ keywordFoo <*> bar <* comma <*> baz'。不過,我忘記了定義了哪個'(<$)'並將其導出。 –
''class Functor f where ...(<$) :: a -> f b - > f a - 定義在'GHC.Base'infixl 4 <$''好點,這也很有用。 –