我正在使用Parsec编写一个日志文件的解析器。该日志文件的每一行都遵循一个共同的结构 A:B:C:D
,其中组件A、B、C和D遵循简单的规则。我已经为每个组件编写了解析器,并希望将它们合并成一个单一的解析器。我的当前方法可以工作,但我感觉应该有更好的解决方案。一个直接的缺点是,对于具有超过4个组件的日志文件,它不会很好地扩展。
parser :: (a -> b -> c -> d -> e) -> Parser a -> Parser b -> Parser c -> Parser d -> Parser e
parser f pa pb pc pd = f <$> pa <* (char ':') <*> pb <* (char ':') <*> pc <* (char ':') <*> pd
我找了一个合适的解析组合器,但是唯一接近的组合器是
sepBy
,它不适用于这种情况。感谢任何帮助!
<:>
的方式似乎比<$>
更强,这意味着我必须在(f <$> pa)
周围加上括号。你有什么建议吗? - Lando-L<*>
相同的修复性,我使用GHCi中的:info (<*>)
进行了查找。 - Noughtmare