问题标签 [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.
haskell - 如何编写此模式同义词而不会出现模棱两可的类型错误?
使用ViewPatterns
and Data.Typeable
,我设法编写了一个函数,允许我编写类似于类型案例分析的东西。观察:
上面的evilId
函数确实很邪恶,因为它Typeable
完全颠覆了参数化:
由于我喜欢作恶,对此我很满意,但是上面的语法很吵。我希望能够更清楚地编写相同的代码,所以我决定编写一个模式同义词:
我想我可以使用这个模式同义词让我的邪恶案例分析更容易阅读:
可悲的是,这根本不起作用。GHC 在对模式进行类型检查之前似乎没有参考我的类型注释,因此它认为b
每个模式中都是一个模棱两可的变量。有什么办法可以用模式同义词干净地包装这些模式,还是我会被我的长视图模式所困扰?
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
.
pattern-matching - 在 Fin 模式中使用文字数字
一方面,我可以使用从文字#_
构造s :Fin
另一方面,我可以使用文字对自然进行模式匹配:
我的问题是,我可以在紧握的手上Fin
匹配s时使用文字吗?即,我可以做些什么来近似以下无效的 Agda 代码:
haskell - Haskell:Map.empty 出现“绑定位置的限定名称”错误
我正在尝试为带有空地图的新类型创建模式同义词。
编译时出现错误提示“绑定位置中的限定名称:Map.empty”。我相信“Map.empty”应该属于我在 newtype 中声明的类型“Map.Map Int String”。
我的问题是是否有办法正确地为空地图设置别名。
我将不胜感激任何反馈。
haskell - 派生阅读的模式同义词?
模式同义词提供了一种表达值的简写方式;他们还可以提供一个抽象名称以避免客户端模块破坏数据声明。这是一个不太有用的例子,作为讨论的例子:
我可以做的是帮助数据捕获提供Read
一个MyNum
. 如何获取Read
实例Zero
?(Zero
是一个伪数据构造函数,而不是类型构造函数,所以这个问题是一个类别错误。)
deriving (Read, ...)
我能想到的就是避免MyNum
手工制作
对于解析,Zero
应该只是MyNum
. 它可以推导出来——或者可以吗?
我认为任何先进的派生机制在这里都没有帮助。因为类型是MyNum
唯一关联的构造函数,即MkNum
.
我可以提供一个功能readZero :: String -> MyNum
。但我不能重载read
,因此我不能嵌入Zero
我正在阅读的长字符串文字中以制作数据结构。
有任何想法吗?
nlp - 如何在 NLP 中找到相似的名词短语?
有没有办法识别相似的名词短语。有些人建议使用基于模式的方法,例如X as Y
表达式:
尤塞恩·博尔特饰 Sprint King
利物浦作为红军
sql - 如何使用 Python/Django 更新/保存数据库中的 oracle 同义词
我正在用Python写一个网页,我想将oracle同义词保存或更新select * from synonyms
到本地数据库中,所以本地python程序可以定期使用这些值,我被困住了,有没有人告诉一些想法?非常感谢!
python-3.x - 用字符串中随机选择的同义词替换单词?
我在 Python 中找到了以下代码,它正在做同样的工作,但它只替换为手动选择的同义词。
rep=synonyms[2] 将采用索引 2 处的任何同义词
我想要的是用随机选择的同义词替换所选单词?
haskell - 我可以从模式同义词中捕获值吗?
假设一个模式:
我可以在函数中使用吗?a
f
上面的代码会产生一个错误Not in scope: 'a'
。
haskell - 为多态模式同义词编写完整的编译指示?
我有以下代码,我不知道应该在??
. 还是多态模式不能完成?
GHC 文件说,当所有的 conlikes 都是多态的时,你必须输入 conlike。
make 时??
()
,编译成功。但这是什么()
意思?GHC 表示仍然没有详尽的使用情况。
- GHC 8.6.5