I do not notice this before. "fun ([0, 1] ++ xs) = .." in my code
could not be compiled, parse error.

Maybe a small abstract can help, as I once also got
confused by that.

* First, syntax without operators

    You can only match on constructors. So, if
    you have

    data Test = Test1 String | Test2 Integer | Test3

    you can do

    function (Test1 s) = ...
    function (Test2 i) = ...
    function Test3 = ...

* Second, syntax with operators

    Haskell allow constructors made of symbols, but you
    have to start them with ':', so this is valid:

    data Test = Test1 String | Integer :** String

    and then

    function (Test1 s) = ...
    function (i :** s) = ...

* Third, special syntax

    Haskell has special syntax for tuples and lists (and
    something else I forgot?). You can ask information
    about a name in ghci using ':i <name>', see what it
    says about (,) and []:

    data (,) a b = (,) a b
    data [] a = [] | a : [a]

    As you can see, (,), [] and : are actually constructors,
    and you can pattern match on them:

    function [] = ...
    function (a:b) = ...
    function ((:) a b) = ...
    function (a,b) = ...
    function ((,) a b) = ...


Best,
Maurício

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to