在Haskell中,有没有办法比较所有通配符是否具有相同的类型和值?例如,我想创建一个表现出以下行为的函数:
(1 M) (2 M) (3 M) -> True
(1 S) (2 S) (3 S) -> True
(1 S) (2 M) (3 S) -> False
Run Code Online (Sandbox Code Playgroud)
换句话说,第一个参数应该是1,2和3,第二个参数应该是全部S或全部M.
在这种情况下,我们可以编写如下函数:
matches (1 _ ) (2 _ ) (3 _ )
Run Code Online (Sandbox Code Playgroud)
但是,我们如何确定通配符是全部是S还是全部M?
如果模式那么简单(全M或全S),为什么不按原样定义?
matches (1, M) (2, M) (3, M) = True
matches (1, S) (2, S) (3, S) = True
matches _ _ _ = False
Run Code Online (Sandbox Code Playgroud)
还是有其他限制?