Haskell - 模式匹配重叠?

时间:2015-05-23 14:34:04

标签: haskell pattern-matching

为什么模式在此代码中匹配重叠:

.toggle{
  font-size: 16px;
  display: block;
  width: 150px;
  border: 1px solid gray;
}
.toggle + input{
  display:none;
}
.toggle + input + *{
  display:none;
  margin-bottom: 4px;
}
.toggle+ input:checked + *{
  display:block;
}

考虑到<div class="PageSection"> <a class="LinkButton" href=""><span>This Is My Link, </span> <span> There Are Many Like </span> <span> It But This One Is Mine </span></a> </div> (+) (Roman (_, [])) x = x (+) x (Roman (_, [])) = x 相同,这是有道理的,但我不认为haskell会照顾它,或者它是否会这样做?

2 个答案:

答案 0 :(得分:3)

x可以是任何内容,因此它可以是Roman (_,[])

答案 1 :(得分:0)

问题是x匹配任何内容。

您可以使用at-patterns使其独一无二:

(+) (Roman (_, [])) x@(Roman(_, _:_) = x
(+) x@(Roman(_, _:_) (Roman (_, [])) = x