diff options
author | John MacFarlane <fiddlosopher@gmail.com> | 2014-06-03 11:00:54 -0700 |
---|---|---|
committer | John MacFarlane <fiddlosopher@gmail.com> | 2014-06-03 11:00:54 -0700 |
commit | 2a627f85fe27d4351e9c612454d18ae701a466a3 (patch) | |
tree | 87931e20d0215eb2af2f388240bc09c30bc8fce4 /src/Text | |
parent | cbfde5cb50a461995a8b60d148615b5a72159f3d (diff) |
Shared: Added ordNub.
API change (adds export).
Diffstat (limited to 'src/Text')
-rw-r--r-- | src/Text/Pandoc/Shared.hs | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs index d8cbe46d9..b0adf55f5 100644 --- a/src/Text/Pandoc/Shared.hs +++ b/src/Text/Pandoc/Shared.hs @@ -35,6 +35,7 @@ module Text.Pandoc.Shared ( splitByIndices, splitStringByIndices, substitute, + ordNub, -- * Text processing backslashEscapes, escapeStringUsing, @@ -94,6 +95,7 @@ import Data.List ( find, isPrefixOf, intercalate ) import qualified Data.Map as M import Network.URI ( escapeURIString, isURI, nonStrictRelativeTo, unEscapeString, parseURIReference ) +import qualified Data.Set as Set import System.Directory import Text.Pandoc.MIME (getMimeType) import System.FilePath ( (</>), takeExtension, dropExtension ) @@ -174,6 +176,13 @@ substitute target replacement lst@(x:xs) = then replacement ++ substitute target replacement (drop (length target) lst) else x : substitute target replacement xs +ordNub :: (Ord a) => [a] -> [a] +ordNub l = go Set.empty l + where + go _ [] = [] + go s (x:xs) = if x `Set.member` s then go s xs + else x : go (Set.insert x s) xs + -- -- Text processing -- |