Hi Jonas Thanks - I was meaning an equivalent to viewl on Data.Sequence, on plain lists: viewl :: [a] -> Either () (a,[a]) viewl [] = Left () viewl (x:xs) = Right (x,xs) It was a trick question because I can't see how you can do it without decrement on the Peano numbers. Best wishes Stephen