filter' pred (x:xs)
  | pred x         = addRecurse
  | otherwise      = recurse
  where 
    !recurse = filter' pred xs
    !addRecurse = x : recurse

-- Errors
filter' pred (x:xs)
  | pred x         = addRecurse
  | otherwise      = recurse
  where 
    !recurse = filter' pred xs
    !addRecurse = x : recurse

-- Errors
filter' pred (x:xs)
  | pred x         = addRecurse
  | otherwise      = recurse
  where 
    !recurse = filter' pred xs
    !addRecurse = x : recurse

-- Errors