问题标签 [pattern-synonyms]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
212 浏览

haskell - 如何编写此模式同义词而不会出现模棱两可的类型错误?

使用ViewPatternsand Data.Typeable,我设法编写了一个函数,允许我编写类似于类型案例分析的东西。观察:

上面的evilId函数确实很邪恶,因为它Typeable完全颠覆了参数化:

由于我喜欢作恶,对此我很满意,但是上面的语法很吵。我希望能够更清楚地编写相同的代码,所以我决定编写一个模式同义词:

我想我可以使用这个模式同义词让我的邪恶案例分析更容易阅读:

可悲的是,这根本不起作用。GHC 在对模式进行类型检查之前似乎没有参考我的类型注释,因此它认为b每个模式中都是一个模棱两可的变量。有什么办法可以用模式同义词干净地包装这些模式,还是我会被我的长视图模式所困扰?

0 投票
1 回答
376 浏览

haskell - 使用 ViewPatterns 和 PatternSynonyms 来简单地进行模式匹配

假设我有一个像这样的语言的 GADT(我的实际语言要复杂得多,大约有 50 个构造函数,但这是一个简化的示例):

现在让我们定义另一个数据类型,如下所示:

另外,假设我有以下功能:

另外,让我们定义以下类型:

现在我想定义一个漂亮的打印功能,如下所示:

请注意,这是无效的,因为BinOp它不是Expr t.

当然我可以Expr t像这样重新定义:

这会很好,但我宁愿不这样做。它使使用它的其他代码更难看,而且我认为它在空间和时间方面效率会稍微低一些,而且你必须匹配两个构造函数而不是一个,这意味着两个 case 语句(因此跳转表)而不是一个。

我怀疑我可以使用以下两个 GHC 扩展的组合来实现我想要干净地做的事情,即:

但我不太确定如何最好地做到这一点。此代码的一个简单示例会很有帮助(然后我可以将其应用于我正在处理的更复杂的语言)。

如果解决方案在编译时不会因缺少模式匹配而发出警告,则会获得许多假想的奖励积分。我知道 GHC 8.2 在这方面可能会有所帮助,因此具有详尽性检查扩展的 GHC 8.2 示例会很好,尽管通过详尽性检查器的预 GHC 8.2 解决方案会更好。

澄清:

我实际上要问的是我怎么能做这样的事情:

在保持这样的定义的同时Expr t

重要的一行是:

不会编译,因为BinOp它不是Expr t. 我想要这样可以编译的行,因为我不想到处这样做:

因为这意味着很多代码重复,因为很多函数都会使用Expr t.

0 投票
1 回答
115 浏览

pattern-matching - 在 Fin 模式中使用文字数字

一方面,我可以使用从文字#_构造s :Fin

另一方面,我可以使用文字对自然进行模式匹配:

我的问题是,我可以在紧握的手上Fin匹配s时使用文字吗?即,我可以做些什么来近似以下无效的 Agda 代码:

0 投票
1 回答
884 浏览

haskell - Haskell:Map.empty 出现“绑定位置的限定名称”错误

我正在尝试为带有空地图的新类型创建模式同义词。

编译时出现错误提示“绑定位置中的限定名称:Map.empty”。我相信“Map.empty”应该属于我在 newtype 中声明的类型“Map.Map Int String”。

我的问题是是否有办法正确地为空地图设置别名。

我将不胜感激任何反馈。

0 投票
0 回答
122 浏览

haskell - 派生阅读的模式同义词?

模式同义词提供了一种表达值的简写方式;他们还可以提供一个抽象名称以避免客户端模块破坏数据声明。这是一个不太有用的例子,作为讨论的例子:

我可以做的是帮助数据捕获提供Read一个MyNum. 如何获取Read实例Zero?(Zero是一个伪数据构造函数,而不是类型构造函数,所以这个问题是一个类别错误。)

deriving (Read, ...)我能想到的就是避免MyNum手工制作

对于解析,Zero应该只是MyNum. 它可以推导出来——或者可以吗?

我认为任何先进的派生机制在这里都没有帮助。因为类型是MyNum唯一关联的构造函数,即MkNum.

我可以提供一个功能readZero :: String -> MyNum。但我不能重载read,因此我不能嵌入Zero我正在阅读的长字符串文字中以制作数据结构。

有任何想法吗?

0 投票
1 回答
199 浏览

nlp - 如何在 NLP 中找到相似的名词短语?

有没有办法识别相似的名词短语。有些人建议使用基于模式的方法,例如X as Y表达式:

尤塞恩·博尔特饰 Sprint King

利物浦作为红军

0 投票
1 回答
119 浏览

sql - 如何使用 Python/Django 更新/保存数据库中的 oracle 同义词

我正在用Python写一个网页,我想将oracle同义词保存或更新select * from synonyms到本地数据库中,所以本地python程序可以定期使用这些值,我被困住了,有没有人告诉一些想法?非常感谢!

0 投票
1 回答
492 浏览

python-3.x - 用字符串中随机选择的同义词替换单词?

我在 Python 中找到了以下代码,它正在做同样的工作,但它只替换为手动选择的同义词。

rep=synonyms[2] 将采用索引 2 处的任何同义词

我想要的是用随机选择的同义词替换所选单词?

0 投票
2 回答
109 浏览

haskell - 我可以从模式同义词中捕获值吗?

假设一个模式:

我可以在函数中使用吗?af

上面的代码会产生一个错误Not in scope: 'a'

0 投票
1 回答
274 浏览

haskell - 为多态模式同义词编写完整的编译指示?

我有以下代码,我不知道应该在??. 还是多态模式不能完成?

GHC 文件说,当所有的 conlikes 都是多态的时,你必须输入 conlike。

make 时?? (),编译成功。但这是什么()意思?GHC 表示仍然没有详尽的使用情况。

  • GHC 8.6.5