Safely getting the next element of a list
It looks like you are trying to do the same thing in two different ways.

To detect the case where e is not in xs, you should check whether yb is empty.  (If that's what you were trying to do with nextElem' _ (x : [])= Nothing then you should note that it doesn't do that.)  I'm not sure what the purpose of the otherwise case is.  If break didn't find any element equal to e, recursion won't find it, either.  Therefore, a simpler solution would be

nextElem :: Eq a =&gt; a -&gt; [a] -&gt; Maybe a
nextElem e xs
  | null match = Nothing
  | null rest  = Just (head xs)
  | otherwise  = Just (head rest)
  where
    (skip, match) = break (== e) xs
    rest = tail match


What is the expected result for nextElem something [something] — a one-element  list that happens to contain the element you are looking for?  I believe you would produce Nothing.  I would have expected something instead.  If you want to preserve the original behavior, where nextElem 'a' "a" produces 'a', then you could insert

nextElem e [_] = Nothing


as a special case to this solution.