[Haskell-cafe] Pattern matching does not work like this?
wagner.andrew at gmail.com
Wed Jul 15 08:09:37 EDT 2009
Err, technically, aren't functions and constructors mutually exclusive? So
if something is a function, it's, by definition, not a constructor?
On Wed, Jul 15, 2009 at 6:25 AM, Eugene Kirpichov <ekirpichov at gmail.com>wrote:
> 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
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe