haskell - 简单函数中的类型混淆

标签 haskell list-comprehension

我离开 Haskell 已经有一段时间了。我现在正在学习“实现函数式语言教程”以加快速度并了解更多关于引擎盖下发生的事情。我似乎无法理解“ token ”这个论点如何适合这里。类型签名清楚地表明这个函数接受一个函数和 2 个解析器并返回一个解析器。 “ token ”是列表理解中使用的列表理解的结果吗?谢谢。

pThen :: (a -> b -> c) -> Parser a -> Parser b -> Parser c
pThen combine p1 p2 tokens =
    [(combine v1 v2, tokens2) | (v1, tokens1) <- p1 tokens,
                                (v2, tokens2) <- p2 tokens1]

编辑:阅读下面的有用答案后,我在本书的前面注意到了这个更简单的示例。它在这里更加明显,以防万一这对将来的其他人有帮助。

pAlt :: Parser a -> Parser a -> Parser a    

pAlt :: Parser a -> Parser a -> Parser a
pAlt p1 p2 toks = (p1 toks) ++ (p2 toks)

最佳答案

Parser 本身是函数类型的类型同义词,tokens 是生成的 Parser 的参数。

关于haskell - 简单函数中的类型混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23165988/

相关文章:

python - 用重复值展平字典

python - 展平 NumPy 数组列表?

haskell - 为什么不丢弃任何值?

haskell - 如何在 Morte 中输入 zipWith?

Haskell 非详尽的函数模式

optimization - Haskell 的有限差异,或如何禁用潜在的优化

python - 转换为列表理解

python - 令人困惑的python列表理解

parsing - Haskell 中针对简单语言 AST 的良好类型设计

for循环中的Python列表初始化