rotCenter f = (\x -> -(f (-x))) data Answer = Yes | No | Unknown xor :: Answer -> Answer -> Answer xor _ Unknown = Unknown xor Unknown _ = Unknown xor Yes Yes = No xor No No = No xor _ _ = Yes role :: Int -> [a] -> [a] role x (y:ys) | x==0 = (y:ys) | otherwise = (role (x-1) (ys ++ [y])) compact [] = [] compact (x:xs) = x:(compact (dropWhile (x==) xs))