haskell - 比较 Haskell 中通配符的相等性..?

标签 haskell syntax

在Haskell中,有没有办法比较所有通配符是否具有相同的类型和值?例如,我想创建一个具有以下行为的函数:

(1 M) (2 M) (3 M) -> True
(1 S) (2 S) (3 S) -> True
(1 S) (2 M) (3 S) -> False

换句话说,第一个参数应该是1、2和3,第二个参数应该是全S或全M。

在这种情况下,我们也许可以编写一个函数,如下所示:

matches (1 _ ) (2 _ ) (3 _ )

但是,我们如何判断通配符是全S还是全M呢?

最佳答案

如果模式那么简单(全部为 M 或全部为 S),为什么不按原样定义它?

matches (1, M) (2, M) (3, M) = True
matches (1, S) (2, S) (3, S) = True
matches _ _ _ = False

或者还有其他限制吗?

关于haskell - 比较 Haskell 中通配符的相等性..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1777679/

相关文章:

haskell - 管理相关 Cabal 包的最佳实践是什么?

list - 从另一个列表中给定索引的列表元素中提取

haskell - 为什么 `forall (a::j) (b::k)` 的工作方式与 `forall (p::(j,k))` 不同?

在 lhs 上带有 "missing"类型参数的 Haskell 显式 forall

ruby-on-rails - Haml 语法 : split a line to a couple of rows

mysql - 如何修复MySQL错误#1064?

html - 无法通过 ID 引用图像 map ?

haskell - GHCi 中的多行命令

mysql - JSON_EXTRACT 作为 INSERT INTO 的值?

c++ - 头文件中的 "class example;"是什么意思?