On Tue, Jul 19, 2016 at 4:08 PM, Niely Boyken <niely.b0yk3n@gmail.com> wrote:
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]
If I understand what you are trying to do correctly, a more idiomatic (and syntactically correct code) would be: case elemIndex toReplace lst of Just i -> let (xs,_:ys)=splitAt i lst in xs ++ (newNmr:ys) _ -> [5] In more general terms, replacing individual elements in standard lists is a very inefficient operation for large lists. Having you considered using a Zipper List which allows you to efficiently replace elements at a focal point (and also to traverse the list forward and backward efficiently)? An example implementation of a Zipper (just for Lists) is at https://hackage.haskell.org/package/ListZipper-1.2.0.2/docs/Data-List-Zipper..., but implementing your own is an easy and instructive exercise. Carl Edman