So many possibilities. How about these?
unpair' = concatMap (\(x,y) -> [x,y]) pair' xs = map snd . filter fst . zip (cycle [True, False]) $ zip xs (tail xs) pair'' xs = [(x,y) | (True,x,y) <- zip3 (cycle [True,False]) xs (tail xs)]
The two versions of the pair must be the same.
Edit: As for my comment above, you can use the split package from Hackage to write:
pair xs = map head . splitEvery 2 $ zip xs (tail xs)
which is closer to the desired
pair xs = everyOther $ zip xs (tail xs)
But, in a spirit of meaninglessness, I think that we probably all agree to write,
pair = map head . splitEvery 2 . (zip <$> id <*> tail)
to provide confusion.
Anthony
source share