Use 'drop 1' rather than tail, skip equality check.

This commit is contained in:
Spencer Janssen
2007-05-08 15:09:43 +00:00
parent 70fe61971b
commit ba9e15e772

View File

@@ -199,10 +199,11 @@ promote w = maybe w id $ do
-- > swap a b . swap a b == id -- > swap a b . swap a b == id
-- --
swap :: Eq a => a -> a -> [a] -> [a] swap :: Eq a => a -> a -> [a] -> [a]
swap a b xs = head $ [insertAt bi a (insertAt ai b xs) | a /= b swap a b xs = maybe xs id $ do
,Just ai <- [L.elemIndex a xs], Just bi <- [L.elemIndex b xs]] ai <- L.elemIndex a xs
++ [xs] bi <- L.elemIndex b xs
where insertAt n x ys = as ++ x : tail bs return . insertAt bi a . insertAt ai b $ xs
where insertAt n x ys = as ++ x : drop 1 bs
where (as,bs) = splitAt n ys where (as,bs) = splitAt n ys
-- --