
27 Jun
2007
27 Jun
'07
1:11 a.m.
Ian, Chris,
dropPrefix :: (Monad m, Eq a) => [a] -> [a] -> m [a] dropPrefix [] ys = return ys dropPrefix (x:xs) (y:ys) | x == y = dropPrefix xs ys dropPrefix _ _ = fail "parse error"
I also would like a monadic variant better (cf. Data.Map.lookup). However, I'd name it differently---not sure how, though---and reserve dropPrefix for dropPrefix :: (Eq a) => [a] -> [a] -> [a] dropPrefix prefix l = go prefix l where go (x : xs) (y : ys) | x == y = go xs ys go [] ys = ys go _ _ = l which, to me, at least, seems more in line with drop and dropWhile. Just my two cents, though. Cheers, Stefan