开发者

Comparing wildcards for equality in Haskell..?

开发者 https://www.devze.com 2022-12-12 18:00 出处:网络
In Haskell, is there a way to compare that all wildcards are of the same type and value? For example, I want to create a function that exhibits the following behavior:

In Haskell, is there a way to compare that all wildcards are of the same type and value? For example, I want to create a function that exhibits the following behavior:

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

In other words, the first parameter should be 开发者_如何转开发1, 2 and 3 and the second parameter should be all S or all M.

In this case, we can maybe write a function as follows:

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

But, how do we determine whether the wildcards are all S or all M?


If the patterns are that simple (all M or all S), why not define it as is?

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

Or are there other constraints?


You have to do the equality check explicitly, by using named variables instead of wildcards:

matches (1 a) (2 b) (3 c) | a == b && b == c  = something

(And as a side note: (1 a) is not a valid pattern, you need (1,a) or some other type of constructor)

0

精彩评论

暂无评论...
验证码 换一张
取 消