Reputation: 39
I have the following haskell code:
Why doesn't x1's pattern matching to function f?
Upvotes: 0
Views: 252
Reputation: 153182
It's pretty hard to read as-is. Let's use some creative whitespace to line things up.
f ( [_ ]:[(x,[xs ])]:[y ,ys ] :[]) = 1
x1 = [[(1,[1,2])],[(1,[1,2])],[(1,[1,2]),(1,[1,2])],[]]
Okay. So there's actually a couple different things that aren't going as you expect!
[xs]
does not match [1, 2]
, because [xs]
is a one-element list and [1, 2]
is a two-element list (possible fix: xs
instead of [xs]
)[y, ys]
happens to match, but I suspect not in the way you intended: y
matches to the first element of the list, just as I think you intend, but ys to the second element of the list, not the remainder of the list I think you intend (possible fix: (y:ys)
instead of [y, ys]
):[]
matches the closing bracket of a list definition, not a final []
element (possible fix: :[]:[]
instead of :[]
; the first []
there matches the element, and the second []
matches the end-of-list marker)Upvotes: 2