Conversion from decimal to negabinary and vice versa in Haskell
A couple of things I noticed:

xrem and xdiv are exactly the same except they use a different division function. You could therefore replace them with a single function that takes the type of division as a parameter:

dec2negbin :: Int -&gt; NegaBinary
dec2negbin = reverse .
             map intToDigit .
                 unfoldr (\x -&gt; if x==0 then Nothing else Just(abs(doDiv rem x (-2)), doDiv div x (-2)))
    where
      doDiv division a b = if b &gt; 0 then division a b else (-(division a (-b)))


In your second function you could use zipWith which applies a given function whilst zipping instead of doing a zip then a map:

negbin2dec :: NegaBinary -&gt; Int
negbin2dec = sum . zipWith raise [0..] . reverse . map digitToInt
    where
        raise e x = x * (-2) ^ e