
On Wed, 27 Jun 2007, Ian Lynagh wrote:
I seem to have a copy of this function in everything I write sooner or later, so I'd like to propose its addition to Data.List. It strips a prefix from a list and, if successful, returns the tail. I often use it with pattern guards:
foo :: String -> IO () foo x | Just y <- dropPrefix "foo=" = putStrLn ("foo is " ++ show y) foo _ = putStrLn "Unknown"
but you can of course achieve the same by using case etc.
The definition is:
dropPrefix :: Eq a => [a] -> [a] -> Maybe [a] dropPrefix [] ys = Just ys dropPrefix (x:xs) (y:ys) | x == y = dropPrefix xs ys dropPrefix _ _ = Nothing
Let's try 11 July for a discussion deadline.
Indeed, I have written this function, too, but only one time, namely for disecting CGI URLs: maybePrefixOf :: Eq a => [a] -> [a] -> Maybe [a] maybePrefixOf (x:xs) (y:ys) = if x==y then maybePrefixOf xs ys else Nothing maybePrefixOf [] ys = Just ys maybePrefixOf _ [] = Nothing