[Haskell-cafe] Pattern matching does not work like this?

Eugene Kirpichov ekirpichov at gmail.com
Wed Jul 15 06:25:25 EDT 2009

Technically, the reason is not that (++) is a function, but that it is
not a constructor of the [] type.

And, not only is it not a constructor, but it also *can't* be one,
because the main characteristic of pattern matching in Haskell is that
it is (contrary to Prolog's unification) unambiguous (unambiguity of
constructors is guaranteed by the semantics of Haskell's algebraic

If ++ could be pattern matched, what should have been the result of
"let (x++y)=[1,2,3] in (x,y)"?

2009/7/15 minh thu <noteed at gmail.com>:
> 2009/7/15 Magicloud Magiclouds <magicloud.magiclouds at gmail.com>:
>> Hi,
>>  I do not notice this before. "fun ([0, 1] ++ xs) = .." in my code
>> could not be compiled, parse error.
> ++ is a function; you can't pattern-match on that.
> Cheers,
> Thu
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

Eugene Kirpichov
Web IR developer, market.yandex.ru

More information about the Haskell-Cafe mailing list