Haskell Parsec,将 oneOf 改编为 [String]

2024-01-12

我正在学习“48 小时内为自己编写一个方案”教程。

 symbol :: Parser Char
 symbol = oneOf "!#$%&|*+-/:<=>?@^_~"

这对于符号来说非常有用,但是如果我有一个关键字列表怎么办? (即结构体、整数)

oneOf 可以适应列表吗?这就是我想要的理想情况,如下所示。

keywords :: Parser String 
keywords = oneOf ["struct","int",..etc]

或者我应该导入 Text.Parsec.Char 并尝试在关键字列表上映射 M 字符串?

我正在尝试标记化,只是想知道走这条路的其他人的最佳实践是什么。

文档说使用这样的东西:

 divOrMod    =   string "div" 
              <|> string "mod"

http://hackage.haskell.org/packages/archive/parsec/3.0.0/doc/html/Text-Parsec-Char.html http://hackage.haskell.org/packages/archive/parsec/3.0.0/doc/html/Text-Parsec-Char.html


其一般形式是the choice组合器 http://hackage.haskell.org/packages/archive/parsec/3.1.3/doc/html/Text-Parsec-Combinator.html#v:choice,其具有以下类型:

choice :: Stream s m t => [ParsecT s u m a] -> ParsecT s u m a

基本上,你给它一个解析器列表,它会按顺序尝试它们,直到一个成功。choice是使用实现的(<|>),所以它与该方法相同。

在您的情况下,要匹配关键字列表但不匹配其他解析器,您可以只映射string超过一个列表Strings,然后使用choice关于这一点。

另一方面,mapM string会做一些完全不同的事情——它会期望all解析器按顺序成功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Haskell Parsec,将 oneOf 改编为 [String] 的相关文章

  • Haskell 中的前提条件检查有哪些选项

    这是一个简单的问题 我认为答案很复杂 一个非常常见的编程问题是函数返回某些内容 或者前置条件检查失败 在Java中 我会使用一些抛出异常的断言函数IllegalArgumentException在方法的开头 如下所示 method body
  • 从 XML 构建树结构的速度很慢

    我正在将 XML 文档解析为我自己的结构 但对于大型输入来说构建它非常慢 是否有更好的方法来做到这一点 public static DomTree
  • 在 Haskell 中增长数组

    我想在 Haskell 中实现以下 命令式 算法 给定一个序列对 e0 s0 e1 s1 e2 s2 en sn 其中 e 和 s 部分不一定是自然数不同的是 在每个时间步都会随机选择该序列的一个元素 例如 ei si 并根据 ei si
  • 将数据类型设置为 Kind * -> * 这不是函子

    布伦特 约尔吉类型分类百科全书 https www haskell org haskellwiki Typeclassopedia给出以下练习 举一个类型的例子 gt 不能将其制成 的实例Functor 不使用undefined 请告诉我什
  • Haskell 下划线与显式变量

    我已经学习 Haskell 几个星期了 我有一个关于下划线的使用的问题 作为函数参数 我认为用一个具体的例子来问我的问题会更好 假设我想定义一个函数 根据提供的索引提取列表的元素 是的 我意识到 已经是预先定义的 我可以定义该函数的两种方法
  • 如何在Java中有效地读取由大量小项目组成的大型XML文件?

    我有一个很大的 XML 文件 其中包含相对固定大小的项目 即
  • 纯函数怎么能做IO呢?

    我最近了解到莫纳德随机数 http hackage haskell org package MonadRandom 0 1 13 docs Control Monad Random Class html t 3aMonadRandom图书馆
  • 在依赖类型的函数式编程语言中,扁平化列表是否更容易?

    在 haskell 中寻找一个可以展平任意深度嵌套列表的函数时 即应用的函数concat递归并在最后一次迭代时停止 使用非嵌套列表 我注意到这需要有一个更灵活的类型系统 因为随着列表深度的变化 输入类型也会变化 确实 有几个 stackov
  • 从字符串名称返回 FontStyle

    我想编写一个函数 它将返回 FontStyle 并以字符串作为参数 FontStyle f function Italic FontStyles Italic 我不想编写 Switch case 或 if else 语句来执行相同的操作 对
  • 将 num 的签名键入 double?

    我才刚刚开始为你学习 Haskell 以获得伟大的好处 并且我在类型类方面遇到了一些麻烦 我想创建一个接受任何数字类型并强制其为双精度的函数 我的第一个想法是定义 numToDouble Num gt Double 但我认为这不起作用 因为
  • Haskell - 用防护罩替换外壳

    我想知道在这部分代码中是否可以用守卫替换 case 语句 firstFunction String gt Maybe MyType secondFunction MyType gt Integer myFunction String gt
  • 规范化且不可变的数据模型

    Haskell如何解决 规范化不可变数据结构 问题 例如 让我们考虑一个表示前女友 男友的数据结构 data Man Man name String exes Woman data Woman Woman name String exes
  • python 3 argparse 调用函数

    我想在 python3 中创建一个类似命令行 类似 shell 的界面 Argparse 似乎负责解析和显示帮助 错误消息 根据argparse 的 python3 文档 https docs python org 3 5 library
  • 如何在 Haskell 中漂亮地打印表格?

    我想在 Haskell 中漂亮地打印一个类似表格的数据结构 列列表 例如 Table StrCol strings a bc c IntCol ints 1 30 2 DblCol doubles 2 0 4 5 3 2 应该渲染类似 st
  • 将 Java 字符串转换为 sql.Timestamp

    收到以下格式的字符串 YYYY MM DD HH MM SS NNNNNN 时间戳来自 DB2 数据库 我需要将其解析为 java sql Timestamp 并且不丢失任何精度 到目前为止 我一直无法找到现有的代码来解析远至微秒的数据 S
  • Haskell 中的尾递归字符串分割

    我正在考虑分割字符串的问题s在一个字符处c 这表示为 break c s 其中 Haskell 库定义break c 足够接近 br br s h t if c h then s else let h t br t in h h t 假设我
  • 简单 Haskell Monad - 随机数

    我正在尝试扩展代码这个帖子 https stackoverflow com questions 3944170 haskell and state 接受的答案 允许我能够基于以种子作为参数的函数 randomGen 调用 randomGen
  • Haskell:Data.Numbers.Primes 库在哪里?

    我尝试导入 Data Numbers Primes import Data Numbers Primes 伦哈斯克尔给了我 5 hs 1 8 Could not find module Data Numbers Primes Use v t
  • 用于遇到 [...] 的 Haskell Parsec 解析器

    我正在尝试使用 Parsec 在 Haskell 中编写一个解析器 目前我有一个可以解析的程序 test x 1 2 3 end 执行此操作的代码如下 testParser do reserved test v lt identifier
  • QuickCheck是否可以生成任意函数

    我试图为身份编写一个 QuickCheck 测试 f y f y 我最初的计划是编写一个返回函数和整数的任意生成器 具有签名Gen Int gt Int Int 并在prop DollerDoesNothing使用 不使用测试该功能应用程序

随机推荐

  • 设置 Angular 2 下拉列表中所选内容的值

    我正在使用 FormBuilder 将值添加到数据库 this formUser this form group firstName new FormControl Validators required lastName new Form
  • 将额外的参数传递给事件处理程序?

    假设我想在分配事件处理程序时传递一些额外的数据 考虑以下代码 private void setup string someData Object assignHandler evHandler public void evHandler O
  • Golang 斐波那契计算似乎已关闭

    我目前有以下用于斐波那契计算的代码 我正在尝试计算大数 但一旦达到 100 计算就会失败 对于 fib 100 我的代码返回 3736710778780434371 但是当我查看其他来源时 它告诉我正确的计算应该是 354224848179
  • ivot_table 索引中的 NaN 值会导致数据丢失

    这是一个简单的数据框 gt df pd DataFrame a a1 a2 a3 b optional1 None optional3 c c1 c2 c3 d 1 2 3 gt df a b c d 0 a1 optional1 c1 1
  • 所有案例均涵盖 Bresenham 的直线算法 [已关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要检查一行中的所有像素 因此我使
  • 使用 MPI_Gather openmpi c 收集字符串

    我想为每个进程生成一个字符串 然后收集所有内容 但是每个进程中创建的字符串是通过附加整数和字符来创建的 我仍然无法正确收集所有内容 我可以一一打印所有部分字符串 但如果我尝试打印 rcv string 我只会得到一个部分字符串 或者可能会出
  • 将字符串从 EBCDIC 转换为 Unicode / UTF8

    我可以从以下位置发送消息Java to Websphere MQ on AS400 如果我从以下位置发送消息WinXP 如果我使用任何可访问的 没有区别Locale 包括完整的语言本地化 英语也没有问题Locale 对于正确编码来说重要的只
  • 如何使用 ElasticSearch 在字符串字段中搜索精确的短语?

    我想在文档中搜索 社交网络营销 全部一起 但我继续得到单词分开的结果 我有以下 DSL 查询 fields title query bool should match title SEO must match content query M
  • Matplotlib FuncAnimation 只绘制一帧

    我正在尝试使用制作动画FuncAnimation模块 但我的代码只产生一帧然后停止 它似乎没有意识到需要更新什么 你能帮我看看出了什么问题吗 import numpy as np import matplotlib pyplot as pl
  • nginx:无效选项:“off”和entrypoint.sh::权限被拒绝

    我正在使用 Dockerfile 创建构建 然后通过 jenkins 作业部署该构建 映像 但容器状态为 CrashLoopBackOff 当我检查日志时 出现以下错误 Error nginx invalid option off etc
  • Javascript:在settimeout之前调用cleartimeout可以吗?

    我有一个设置计时器的函数 并在计时器到期时回调自身 我想知道的是在函数顶部清除计时器是否是不好的做法 这样做的原因是因为我会不时地异步调用该函数 如果我不先清除计时器 我将同时运行两个计时器 我意识到我可以在对函数进行其他调用之前清除计时器
  • 为什么 Android 上的 RxJava with Retrofit doOnError() 不起作用,而 Subscriber onError 却起作用

    有人可以解释一下为什么这样的代码 networApi getList subscribeOn Schedulers newThread observeOn AndroidSchedulers mainThread doOnError thr
  • 按钮上的图像

    我希望下面的两个脚本有相同的输出 但是当我执行时我没有在按钮上看到图像Script 1 然而 Script 2效果很好 Script 1 from Tkinter import class fe def init self master s
  • enumerate的实现细节是什么?

    Python 有enumerate 使用索引迭代对象 我怀疑解释器创建大量 int 对象的唯一目的是跟踪事物的位置 这政治公众人物页面 http www python org dev peps pep 0279 说了以下内容 但我不太明白幕
  • 获取WIFI信号强度-寻求最佳方法(IOCTL、iwlist(iw)等)

    我想扫描从3个AP接收到的信号强度 如果每 300 毫秒 最多 500 毫秒 发生一次 我会很高兴 我在路由器上刷了 OpenWRT 我正在寻找一个好的工具来做到这一点 首先 我发现 iwconfig 可以工作 但仅限于我连接到的网络 所以
  • 使用双寄存器方法解决亚稳态问题

    为了解决Verilog中不同时钟域引起的亚稳态 采用双寄存器方法 但据我所知 亚稳态的最终输出尚未确定 输出独立于输入 那么 我的问题是如何保证使用双寄存器方法输出的正确性 Thanks 您不能完全确定您避免了亚稳态 正如您所提到的 亚稳态
  • Mailchimp - 如何判断用户是否已取消订阅?

    因此 他们点击了时事通讯中的取消订阅链接 在他们的个人资料中 例如 此人于 2017 年 3 月 24 日下午 2 40 取消订阅 收到 时事通讯测试 6 后 很好 但是我如何通过 API 以编程方式判断某人是否已取消订阅呢 有可能吗 我问
  • 使用套接字/内存而不是文件在 Cuda 中解码视频

    我目前正在尝试使用 cuda 解码视频 我有一个名为cudaDecodeD3D9 该示例使用了一种名为cuvidCreateVideoSource它采用指向源视频的文件指针 有没有办法让Cuda从内存 套接字 流加载视频 结果我无法使用cu
  • swift 4:将对象与元组进行模式匹配(元组模式无法匹配非元组类型的值)

    我有一个带有几个字段的自定义结构 我想快速对其进行模式匹配switch语句 以便我可以通过将其中一个字段与正则表达式进行比较来自定义匹配 例如 鉴于此结构 struct MyStruct let header String let text
  • Haskell Parsec,将 oneOf 改编为 [String]

    我正在学习 48 小时内为自己编写一个方案 教程 symbol Parser Char symbol oneOf lt gt 这对于符号来说非常有用 但是如果我有一个关键字列表怎么办 即结构体 整数 oneOf 可以适应列表吗 这就是我想要