Hi Niely, everything after the "in" in your "let in" is one expression. In other words all of this: init x x ++ newNmr x ++ y
is being read as one line.. so init x x ++ newNmr x ++ y which is why the compiler is complaining that you are applying init to two values (init x x). I think what you want is actually something more like (init x) ++ [newNmr] ++ y assuming newNmr is a number and not already a list. I'm not entirely sure what you were trying to do there but you seem a bit confused.. "init x" on its own doesn't actually do anything; it computes a value but you aren't assigning it to anything here. If you wanted to keep those exact expressions you could instead do let x0 = init x x1 = x0 ++ newNmr in x1 ++ y and x1 ++ y would be the thing that actually gets return. In any case I am certainly no expert so hopefully someone else can explain this better than I can. On Tue, Jul 19, 2016 at 1:08 PM, Niely Boyken <niely.b0y...@gmail.com> wrote: > Hi > > I'm trying to make a custom function to replace a given element in a list. > > Code: > let i = elemIndex toReplace lst in > > case i of > Just i -> > let z = splitAt i lst > x = fst z > y = (snd z) > in > init x > x ++ newNmr > x ++ y > > Nothing -> [5] > > Error: > >> 1) >> * Couldn't match expected type `[a] -> [a]' with actual type `[a]' >> * The function `init' is applied to two arguments, >> but its type `[a] -> [a]' has only one >> In the first argument of `(++)', namely `init x x' >> In the expression: init x x ++ newNmr x ++ y >> * Relevant bindings include >> y :: [a] (bound at C:\users\niel\desktop\test2.hs:41:21) >> x :: [a] (bound at C:\users\niel\desktop\test2.hs:40:21) >> z :: ([a], [a]) (bound at C:\users\niel\desktop\test2.hs:39:21) >> newNmr :: [a] (bound at C:\users\niel\desktop\test2.hs:34:30) >> lst :: [a] (bound at C:\users\niel\desktop\test2.hs:34:26) >> toReplace :: a (bound at C:\users\niel\desktop\test2.hs:34:16) >> (Some bindings suppressed; use -fmax-relevant-binds=N or >> -fno-max-relevant-binds) >> 2) >> * Couldn't match expected type `[a] -> [a]' with actual type `[a]' >> * The function `newNmr' is applied to one argument, >> but its type `[a]' has none >> In the first argument of `(++)', namely `newNmr x' >> In the second argument of `(++)', namely `newNmr x ++ y' >> * Relevant bindings include >> y :: [a] (bound at C:\users\niel\desktop\test2.hs:41:21) >> x :: [a] (bound at C:\users\niel\desktop\test2.hs:40:21) >> z :: ([a], [a]) (bound at C:\users\niel\desktop\test2.hs:39:21) >> newNmr :: [a] (bound at C:\users\niel\desktop\test2.hs:34:30) >> lst :: [a] (bound at C:\users\niel\desktop\test2.hs:34:26) >> toReplace :: a (bound at C:\users\niel\desktop\test2.hs:34:16) >> (Some bindings suppressed; use -fmax-relevant-binds=N or >> -fno-max-relevant-binds) >> > > I've tried a lot, but I always got an error. > What am I doing wrong? > > Thanks! > > _______________________________________________ > Haskell mailing list > Haskell@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell > >
_______________________________________________ Haskell mailing list Haskell@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell