Turtle中组合skip模式与其他模式时类型错误问题及解决方法
解决Turtle模式模拟正则lookbefore的类型错误问题
错误原因
skip "key:"返回的是Pattern ()(仅完成匹配,不产生捕获值),而chars的类型是Pattern Text(用于捕获文本内容)。Turtle中<>操作符要求组合的两个模式输出类型必须完全一致,因此出现Text与()类型不匹配的错误。
解决方案
有两种可行的实现方式:
推荐方案:使用
*>顺序组合操作符*>的作用是按顺序执行左右两个模式,丢弃左侧模式的结果,保留右侧模式的输出,正好符合"跳过前缀、捕获后续内容"的需求:match (skip "key:" *> chars) "key:value" -- 输出 "value"备选方案:统一模式输出类型
如果坚持使用<>组合,可将string "key:"的结果转换为(),让两边模式类型统一:match ((const () <$> string "key:") <> chars) "key:value" -- 输出 "value"这种写法通过
const () <$>把string "key:"返回的Pattern Text转换成Pattern (),与chars组合后最终捕获chars的结果,但可读性不如第一种方案。
内容的提问来源于stack exchange,提问作者Jencel
相关产品推荐
相关产品推荐

