Home > Enterprise >  Haskell: add multiple things to a list
Haskell: add multiple things to a list

Time:11-02

I have an assigment and im kinda stuck:

xs = [4, 1]
ys = [3, 2]

the goal is to create a list [1, 2, 3, 4]

I am allowed to use the following commands: head, tail, , !!, reverse, take, drop, init

I know that tail xs (reverse ys) results in [1, 2, 3]

but how do i get the 4 at the end?

My "solution" would have been something along the lines of:

zs = tail xs    (reverse ys     (head xs)
zs = [1, 2, 3, 4]

but instead im getting the following error:

<interactive>:39:1: error:
    * Non type-variable argument in the constraint: Num [a]
      (Use FlexibleContexts to permit this)
    * When checking the inferred type
        it :: forall a. (Num a, Num [a]) => [a]

The problem is i have no clue what that means It would be nice if someone could explain me how the brackets work in haskell and how i can solve the problem.

CodePudding user response:

You have unbalanced parentheses in your demonstrated attempt.

tail xs    (reverse ys     (head xs)

Assuming you meant:

tail xs    (reverse ys    (head xs))

head xs is not a list, so using it with will yield an error. But we can make it a list with a single element quite easily.

tail xs    (reverse ys    [head xs])

This now yields [1, 2, 3, 4], but you can further remove the parentheses because of how associates.

tail xs    reverse ys    [head xs]
  • Related