full-text-search 0.2.1.1 → 0.2.1.3
raw patch · 4 files changed
+133/−22 lines, 4 filesdep ~Cabaldep ~arraydep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: Cabal, array, base, split, tasty, tasty-quickcheck, text, tokenize
API changes (from Hackage documentation)
Files
- Data/SearchEngine/DocIdSet.hs +61/−9
- Data/SearchEngine/TermBag.hs +62/−9
- changelog +6/−0
- full-text-search.cabal +4/−4
Data/SearchEngine/DocIdSet.hs view
@@ -1,6 +1,7 @@-{-# LANGUAGE BangPatterns, GeneralizedNewtypeDeriving #-}+{-# LANGUAGE BangPatterns, GeneralizedNewtypeDeriving, MultiParamTypeClasses,+ TypeFamilies #-} module Data.SearchEngine.DocIdSet (- DocId(..),+ DocId(DocId), DocIdSet(..), null, size,@@ -19,10 +20,10 @@ import Data.Word import qualified Data.Vector.Unboxed as Vec import qualified Data.Vector.Unboxed.Mutable as MVec-import qualified Data.Vector.Generic.Base as VecGen-import qualified Data.Vector.Unboxed.Base as VecBase-import qualified Data.Vector.Generic.Mutable as VecMut+import qualified Data.Vector.Generic as GVec+import qualified Data.Vector.Generic.Mutable as GMVec import Control.Monad.ST+import Control.Monad (liftM) import qualified Data.Set as Set import Data.List (foldl', sortBy) import Data.Function (on)@@ -30,10 +31,8 @@ import Prelude hiding (null) -newtype DocId = DocId Word32- deriving (Eq, Ord, Show, Enum, Bounded, Vec.Unbox,- VecGen.Vector VecBase.Vector,- VecMut.MVector VecBase.MVector)+newtype DocId = DocId { unDocId :: Word32 }+ deriving (Eq, Ord, Show, Enum, Bounded) newtype DocIdSet = DocIdSet (Vec.Vector DocId) deriving (Eq, Show)@@ -147,4 +146,57 @@ EQ -> do MVec.write out i x go (Vec.tail xs) (Vec.tail ys) (i+1) LT -> go (Vec.tail xs) ys i++------------------------------------------------------------------------------+-- verbose Unbox instances+--++instance MVec.Unbox DocId++newtype instance MVec.MVector s DocId = MV_DocId (MVec.MVector s Word32)++instance GMVec.MVector MVec.MVector DocId where+ basicLength (MV_DocId v) = GMVec.basicLength v+ basicUnsafeSlice i l (MV_DocId v) = MV_DocId (GMVec.basicUnsafeSlice i l v)+ basicUnsafeNew l = MV_DocId `liftM` GMVec.basicUnsafeNew l+ basicUnsafeReplicate l x = MV_DocId `liftM` GMVec.basicUnsafeReplicate l (unDocId x)+ basicUnsafeRead (MV_DocId v) i = DocId `liftM` GMVec.basicUnsafeRead v i+ basicUnsafeWrite (MV_DocId v) i x = GMVec.basicUnsafeWrite v i (unDocId x)+ basicClear (MV_DocId v) = GMVec.basicClear v+ basicSet (MV_DocId v) x = GMVec.basicSet v (unDocId x)+ basicUnsafeGrow (MV_DocId v) l = MV_DocId `liftM` GMVec.basicUnsafeGrow v l+ basicUnsafeCopy (MV_DocId v) (MV_DocId v') = GMVec.basicUnsafeCopy v v'+ basicUnsafeMove (MV_DocId v) (MV_DocId v') = GMVec.basicUnsafeMove v v'+ basicOverlaps (MV_DocId v) (MV_DocId v') = GMVec.basicOverlaps v v'+ {-# INLINE basicLength #-}+ {-# INLINE basicUnsafeSlice #-}+ {-# INLINE basicOverlaps #-}+ {-# INLINE basicUnsafeNew #-}+ {-# INLINE basicUnsafeReplicate #-}+ {-# INLINE basicUnsafeRead #-}+ {-# INLINE basicUnsafeWrite #-}+ {-# INLINE basicClear #-}+ {-# INLINE basicSet #-}+ {-# INLINE basicUnsafeCopy #-}+ {-# INLINE basicUnsafeMove #-}+ {-# INLINE basicUnsafeGrow #-}++newtype instance Vec.Vector DocId = V_DocId (Vec.Vector Word32)++instance GVec.Vector Vec.Vector DocId where+ basicUnsafeFreeze (MV_DocId mv) = V_DocId `liftM` GVec.basicUnsafeFreeze mv+ basicUnsafeThaw (V_DocId v) = MV_DocId `liftM` GVec.basicUnsafeThaw v+ basicLength (V_DocId v) = GVec.basicLength v+ basicUnsafeSlice i l (V_DocId v) = V_DocId (GVec.basicUnsafeSlice i l v)+ basicUnsafeIndexM (V_DocId v) i = DocId `liftM` GVec.basicUnsafeIndexM v i+ basicUnsafeCopy (MV_DocId mv)+ (V_DocId v) = GVec.basicUnsafeCopy mv v+ elemseq (V_DocId v) x = GVec.elemseq v (unDocId x)+ {-# INLINE basicUnsafeFreeze #-}+ {-# INLINE basicUnsafeThaw #-}+ {-# INLINE basicLength #-}+ {-# INLINE basicUnsafeSlice #-}+ {-# INLINE basicUnsafeIndexM #-}+ {-# INLINE basicUnsafeCopy #-}+ {-# INLINE elemseq #-}
Data/SearchEngine/TermBag.hs view
@@ -1,6 +1,7 @@-{-# LANGUAGE BangPatterns, GeneralizedNewtypeDeriving #-}+{-# LANGUAGE BangPatterns, GeneralizedNewtypeDeriving, MultiParamTypeClasses,+ TypeFamilies #-} module Data.SearchEngine.TermBag (- TermId(..), TermCount,+ TermId(TermId), TermCount, TermBag, size, fromList,@@ -13,20 +14,18 @@ import qualified Data.Vector.Unboxed as Vec import qualified Data.Vector.Unboxed.Mutable as MVec-import qualified Data.Vector.Generic.Base as VecGen-import qualified Data.Vector.Unboxed.Base as VecBase-import qualified Data.Vector.Generic.Mutable as VecMut+import qualified Data.Vector.Generic as GVec+import qualified Data.Vector.Generic.Mutable as GMVec import Control.Monad.ST+import Control.Monad (liftM) import qualified Data.Map as Map import Data.Word (Word32, Word8) import Data.Bits import Data.List (sortBy, foldl') import Data.Function (on) -newtype TermId = TermId Word32- deriving (Eq, Ord, Show, Enum,- Vec.Unbox, VecGen.Vector VecBase.Vector,- VecMut.MVector VecBase.MVector)+newtype TermId = TermId { unTermId :: Word32 }+ deriving (Eq, Ord, Show, Enum) instance Bounded TermId where minBound = TermId 0@@ -207,3 +206,57 @@ go (Vec.tail xs) (Vec.tail ys) (i+1) LT -> do MVec.write out i x go (Vec.tail xs) ys (i+1)++------------------------------------------------------------------------------+-- verbose Unbox instances+--++instance MVec.Unbox TermId++newtype instance MVec.MVector s TermId = MV_TermId (MVec.MVector s Word32)++instance GMVec.MVector MVec.MVector TermId where+ basicLength (MV_TermId v) = GMVec.basicLength v+ basicUnsafeSlice i l (MV_TermId v) = MV_TermId (GMVec.basicUnsafeSlice i l v)+ basicUnsafeNew l = MV_TermId `liftM` GMVec.basicUnsafeNew l+ basicUnsafeReplicate l x = MV_TermId `liftM` GMVec.basicUnsafeReplicate l (unTermId x)+ basicUnsafeRead (MV_TermId v) i = TermId `liftM` GMVec.basicUnsafeRead v i+ basicUnsafeWrite (MV_TermId v) i x = GMVec.basicUnsafeWrite v i (unTermId x)+ basicClear (MV_TermId v) = GMVec.basicClear v+ basicSet (MV_TermId v) x = GMVec.basicSet v (unTermId x)+ basicUnsafeGrow (MV_TermId v) l = MV_TermId `liftM` GMVec.basicUnsafeGrow v l+ basicUnsafeCopy (MV_TermId v) (MV_TermId v') = GMVec.basicUnsafeCopy v v'+ basicUnsafeMove (MV_TermId v) (MV_TermId v') = GMVec.basicUnsafeMove v v'+ basicOverlaps (MV_TermId v) (MV_TermId v') = GMVec.basicOverlaps v v'+ {-# INLINE basicLength #-}+ {-# INLINE basicUnsafeSlice #-}+ {-# INLINE basicOverlaps #-}+ {-# INLINE basicUnsafeNew #-}+ {-# INLINE basicUnsafeReplicate #-}+ {-# INLINE basicUnsafeRead #-}+ {-# INLINE basicUnsafeWrite #-}+ {-# INLINE basicClear #-}+ {-# INLINE basicSet #-}+ {-# INLINE basicUnsafeCopy #-}+ {-# INLINE basicUnsafeMove #-}+ {-# INLINE basicUnsafeGrow #-}++newtype instance Vec.Vector TermId = V_TermId (Vec.Vector Word32)++instance GVec.Vector Vec.Vector TermId where+ basicUnsafeFreeze (MV_TermId mv) = V_TermId `liftM` GVec.basicUnsafeFreeze mv+ basicUnsafeThaw (V_TermId v) = MV_TermId `liftM` GVec.basicUnsafeThaw v+ basicLength (V_TermId v) = GVec.basicLength v+ basicUnsafeSlice i l (V_TermId v) = V_TermId (GVec.basicUnsafeSlice i l v)+ basicUnsafeIndexM (V_TermId v) i = TermId `liftM` GVec.basicUnsafeIndexM v i+ basicUnsafeCopy (MV_TermId mv)+ (V_TermId v) = GVec.basicUnsafeCopy mv v+ elemseq (V_TermId v) x = GVec.elemseq v (unTermId x)+ {-# INLINE basicUnsafeFreeze #-}+ {-# INLINE basicUnsafeThaw #-}+ {-# INLINE basicLength #-}+ {-# INLINE basicUnsafeSlice #-}+ {-# INLINE basicUnsafeIndexM #-}+ {-# INLINE basicUnsafeCopy #-}+ {-# INLINE elemseq #-}+
changelog view
@@ -1,3 +1,9 @@+0.2.1.3 Duncan Coutts <duncan@well-typed.com> May 2015+ * Compatibility with GHC 7.10 (no API changes)++0.2.1.2 Adam Gundry <adam@well-typed.com> July 2014+ * Compatibility with GHC 7.8 (no API changes)+ 0.2.1.1 Duncan Coutts <duncan@well-typed.com> May 2014 * Fix for NaN scores with a doc field that is empty for all docs * Add instance Show NoFeatures
full-text-search.cabal view
@@ -1,5 +1,5 @@ name: full-text-search-version: 0.2.1.1+version: 0.2.1.3 synopsis: In-memory full text search engine description: An in-memory full text search engine library. It lets you run full-text queries on a collection of your documents.@@ -77,11 +77,11 @@ RecordWildCards, GeneralizedNewtypeDeriving, ScopedTypeVariables- build-depends: base >=4.5 && <4.7,- array >=0.4 && <0.5,+ build-depends: base >=4.5 && <4.9,+ array >=0.4 && <0.6, vector >=0.10 && <0.11, containers >=0.4 && <0.6,- text >=0.11 && <1.2+ text >=0.11 && <1.3 default-language: Haskell2010 ghc-options: -Wall -funbox-strict-fields