Search code examples
haskellghcihugs

What is wrong with my Haskell code?


My code:

addConcat :: [Int] -> [Int]
addConcat [x,y] = z:(z + y) where (z = x + y)

I'm implementing a function not exactly the one above but it's of the same format and I always get:

Syntax error in input (unexpected symbol "y")

So what is wrong with my Haskell code? I really need to use the 'where' clause but I think I'm doing something wrong.


Solution

  • I cannot reproduce the error you claim you get. If you are writing that code into a file and compiling it with ghc the error is:

    <filename>.hs:2:38: parse error on input ‘=’
    

    And the problem is that the syntax for where is wrong. Either write:

    an_expression where z = x+y
    

    Or you have to use curly braces:

    an_expression where {z=x+y;}
    

    You cannot use parenthesis to group an assignment.

    Note that when writing in ghci you must group together the declarations and use a let to define functions:

    Prelude> let {addConcat :: [Int] -> [Int]; addConcat [x,y] = [z,z+y] where z=x+y;}
    Prelude> addConcat [1,2]
    [3,5]
    

    Note also that even fixing this your function still has a type error because the second argument of : must be a list while z+y is a number. You want z:[z+y] or more simply [z, z+y].