Revert "[phylo] quality function reparameterized to have high levels for lambda-...
[gargantext.git] / src / Gargantext / Database / Schema / Ngrams.hs
index a9e6d3571812489c0078a63a5195cda03e227e7a..ac51e5149827791976337d70b3caf40caba5b47f 100644 (file)
@@ -19,27 +19,27 @@ Ngrams connection to the Database.
 module Gargantext.Database.Schema.Ngrams
   where
 
+import Data.HashMap.Strict (HashMap)
 import Data.Hashable (Hashable)
 import Codec.Serialise (Serialise())
 import Control.Lens (over)
 import Control.Monad (mzero)
 import Data.Aeson
 import Data.Aeson.Types (toJSONKeyText)
-import Data.Map (Map, fromList, lookup)
+import Data.Map (fromList, lookup)
 import Data.Text (Text, splitOn, pack, strip)
-import Gargantext.Core.Types (TODO(..))
+import Gargantext.Core.Types (TODO(..), Typed(..))
 import Gargantext.Prelude
-import Prelude (Functor)
 import Servant (FromHttpApiData, parseUrlPiece, Proxy(..))
 import Text.Read (read)
 import Gargantext.Database.Types
 import Gargantext.Database.Schema.Prelude
 import qualified Database.PostgreSQL.Simple as PGS
+import qualified Data.HashMap.Strict as HashMap
 
 
-type NgramsId    = Int
-type NgramsTerms = Text
-type Size        = Int
+type NgramsId  = Int
+type Size      = Int
 
 data NgramsPoly id terms n = NgramsDB { _ngrams_id    :: !id
                                       , _ngrams_terms :: !terms
@@ -147,6 +147,8 @@ data Ngrams = UnsafeNgrams { _ngramsTerms :: Text
                            }
   deriving (Generic, Show, Eq, Ord)
 
+instance Hashable Ngrams
+
 makeLenses ''Ngrams
 instance PGS.ToRow Ngrams where
   toRow (UnsafeNgrams t s) = [toField t, toField s]
@@ -175,15 +177,23 @@ makeLenses ''NgramsT
 
 instance Functor NgramsT where
   fmap = over ngramsT
+
 -----------------------------------------------------------------------
-withMap :: Map NgramsTerms NgramsId -> NgramsTerms -> NgramsId
-withMap m n = maybe (panic "withMap: should not happen") identity (lookup n m)
+withMap :: HashMap Text NgramsId -> Text -> NgramsId
+withMap m n = maybe (panic $ "[G.D.S.Ngrams.withMap] Should not happen" <> (cs $ show n))
+                    identity (HashMap.lookup n m)
 
-indexNgramsT :: Map NgramsTerms NgramsId -> NgramsT Ngrams -> NgramsT (Indexed Ngrams)
+indexNgramsT :: HashMap Text NgramsId -> NgramsT Ngrams -> NgramsT (Indexed Int Ngrams)
 indexNgramsT = fmap . indexNgramsWith . withMap
 
-indexNgrams :: Map NgramsTerms NgramsId -> Ngrams -> Indexed Ngrams
+-- | TODO replace NgramsT whith Typed NgramsType Ngrams
+indexTypedNgrams :: HashMap Text NgramsId
+                 -> Typed NgramsType Ngrams
+                 -> Typed NgramsType (Indexed Int Ngrams)
+indexTypedNgrams = fmap . indexNgramsWith . withMap
+
+indexNgrams :: HashMap Text NgramsId -> Ngrams -> Indexed Int Ngrams
 indexNgrams = indexNgramsWith . withMap
 
-indexNgramsWith :: (NgramsTerms -> NgramsId) -> Ngrams -> Indexed Ngrams
-indexNgramsWith f n = Indexed n (f $ _ngramsTerms n)
+indexNgramsWith :: (Text -> NgramsId) -> Ngrams -> Indexed Int Ngrams
+indexNgramsWith f n = Indexed (f $ _ngramsTerms n) n