summaryrefslogtreecommitdiff
path: root/src/Text
diff options
context:
space:
mode:
authorJohn MacFarlane <fiddlosopher@gmail.com>2014-06-03 11:00:54 -0700
committerJohn MacFarlane <fiddlosopher@gmail.com>2014-06-03 11:00:54 -0700
commit2a627f85fe27d4351e9c612454d18ae701a466a3 (patch)
tree87931e20d0215eb2af2f388240bc09c30bc8fce4 /src/Text
parentcbfde5cb50a461995a8b60d148615b5a72159f3d (diff)
Shared: Added ordNub.
API change (adds export).
Diffstat (limited to 'src/Text')
-rw-r--r--src/Text/Pandoc/Shared.hs9
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
--