(For some reason my previous post seems to have been truncated.) I have a function that, simplifying a little, looks like this: fn :: [a] -> a fn = (head .) . takeWhile $ (\_ -> True)