Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is this Haskell incorrect?

I have a Haskell file which looks like this:

longest::[Integer]->[Integer]->[Integer]
max a b = if length a > length b then a else b

llfs::[Integer]->Integer
llfs li = length(foldl longest group(li))

llfs([1, 2, 3, 3, 4, 5, 1, 1, 1])

Which should print out the result of the function call at the end, however when I run the file I get this error:

parse error (possibly incorrect indentation)

I don't understand what I'm doing wrong. What should I do to fix it?


Edit

After putting the last line inside the main function, like this:

import List

longest::[Integer]->[Integer]->[Integer]
longest a b = if length a > length b then a else b

llfs::[Integer]->Integer
llfs li = length(foldl longest group(li))

main = print (llfs [1, 2, 3, 3, 4, 5, 1, 1, 1])

I now get the following error:

C:\Users\Martin\Desktop\Haskell\Q1.hs:7:31:
    Couldn't match expected type `[Integer]'
           against inferred type `[a] -> [[a]]'
    In the second argument of `foldl', namely `group'
    In the first argument of `length', namely
        `(foldl longest group (li))'
    In the expression: length (foldl longest group (li))

This one looks a little more difficult! How do I solve it?

like image 991
Martin Avatar asked Mar 21 '26 18:03

Martin


1 Answers

Your code isn't correct.

This

longest::[Integer]->[Integer]->[Integer]
max a b = if length a > length b then a else b

should be

longest::[Integer]->[Integer]->[Integer]
longest a b = if length a > length b then a else b

And you need a main function

main = do print llfs([1, 2, 3, 3, 4, 5, 1, 1, 1])

Just for the sake of improving your code, if you have a function signature and give it a lower case letter(s) as its type (say the letter a), it becomes generic. For example

longest:: [a] -> [a] -> [a]
longest x y = if length x > length y then x else y

Means that rather than just working on lists of Integers, it works on lists of anything. Suddenly you have a very reusable function.

like image 197
Yacoby Avatar answered Mar 24 '26 17:03

Yacoby