The fold function in
fold takes as parameters the accumulator
x, and the element
y. So there is no
z that is passed.
But even if that was somehow possible, there are still other issues.
x is the accumulator here, so a list, that means that
x : y makes no sense, since
(:) :: a -> [a] -> [a] takes an element and a list, and constructs a new list.
You can however easily make use of
foldr to implement a
takeWhile function. Indeed:
takeWhile' p = foldr (\x -> if p x then (x :) else const ) 
We here thus check if the predicate holds, if that is the case, we preprend the accumulator with
x. If not, we return
, regardless of the value of the accumulator.
Due to the laziness of
foldr, it will not look for elements after an element has failed the accumulator, since
const  will ingore the value of the accumulator.
CLICK HERE to find out more related problems solutions.