module Data.FuzzySet.Types
    ( FuzzySetItem(..)
    , GramInfo(..)
    , FuzzySet(..)
    ) where

import Data.HashMap.Strict (HashMap)
import Data.Vector (Vector)
import Data.Text (Text)


data FuzzySetItem = FuzzySetItem
    { FuzzySetItem -> Double
vectorMagnitude :: !Double
    , FuzzySetItem -> Text
normalizedEntry :: !Text
    } deriving (FuzzySetItem -> FuzzySetItem -> Bool
(FuzzySetItem -> FuzzySetItem -> Bool)
-> (FuzzySetItem -> FuzzySetItem -> Bool) -> Eq FuzzySetItem
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FuzzySetItem -> FuzzySetItem -> Bool
$c/= :: FuzzySetItem -> FuzzySetItem -> Bool
== :: FuzzySetItem -> FuzzySetItem -> Bool
$c== :: FuzzySetItem -> FuzzySetItem -> Bool
Eq, Int -> FuzzySetItem -> ShowS
[FuzzySetItem] -> ShowS
FuzzySetItem -> String
(Int -> FuzzySetItem -> ShowS)
-> (FuzzySetItem -> String)
-> ([FuzzySetItem] -> ShowS)
-> Show FuzzySetItem
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [FuzzySetItem] -> ShowS
$cshowList :: [FuzzySetItem] -> ShowS
show :: FuzzySetItem -> String
$cshow :: FuzzySetItem -> String
showsPrec :: Int -> FuzzySetItem -> ShowS
$cshowsPrec :: Int -> FuzzySetItem -> ShowS
Show)


data GramInfo = GramInfo
    { GramInfo -> Int
itemIndex :: !Int
    , GramInfo -> Int
gramCount :: !Int
    } deriving (GramInfo -> GramInfo -> Bool
(GramInfo -> GramInfo -> Bool)
-> (GramInfo -> GramInfo -> Bool) -> Eq GramInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GramInfo -> GramInfo -> Bool
$c/= :: GramInfo -> GramInfo -> Bool
== :: GramInfo -> GramInfo -> Bool
$c== :: GramInfo -> GramInfo -> Bool
Eq, Int -> GramInfo -> ShowS
[GramInfo] -> ShowS
GramInfo -> String
(Int -> GramInfo -> ShowS)
-> (GramInfo -> String) -> ([GramInfo] -> ShowS) -> Show GramInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GramInfo] -> ShowS
$cshowList :: [GramInfo] -> ShowS
show :: GramInfo -> String
$cshow :: GramInfo -> String
showsPrec :: Int -> GramInfo -> ShowS
$cshowsPrec :: Int -> GramInfo -> ShowS
Show)


-- | Main fuzzy string set data type. Use 'Data.FuzzySet.emptySet',
-- 'Data.FuzzySet.defaultSet', or 'Data.FuzzySet.fromList' to create sets.
--
data FuzzySet = FuzzySet
    { FuzzySet -> HashMap Text Text
exactSet       :: !(HashMap Text Text)
    , FuzzySet -> HashMap Text [GramInfo]
matchDict      :: !(HashMap Text [GramInfo])
    , FuzzySet -> HashMap Int (Vector FuzzySetItem)
items          :: !(HashMap Int (Vector FuzzySetItem))
    , FuzzySet -> Int
gramSizeLower  :: !Int
    , FuzzySet -> Int
gramSizeUpper  :: !Int
    , FuzzySet -> Bool
useLevenshtein :: !Bool
    } deriving (FuzzySet -> FuzzySet -> Bool
(FuzzySet -> FuzzySet -> Bool)
-> (FuzzySet -> FuzzySet -> Bool) -> Eq FuzzySet
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FuzzySet -> FuzzySet -> Bool
$c/= :: FuzzySet -> FuzzySet -> Bool
== :: FuzzySet -> FuzzySet -> Bool
$c== :: FuzzySet -> FuzzySet -> Bool
Eq, Int -> FuzzySet -> ShowS
[FuzzySet] -> ShowS
FuzzySet -> String
(Int -> FuzzySet -> ShowS)
-> (FuzzySet -> String) -> ([FuzzySet] -> ShowS) -> Show FuzzySet
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [FuzzySet] -> ShowS
$cshowList :: [FuzzySet] -> ShowS
show :: FuzzySet -> String
$cshow :: FuzzySet -> String
showsPrec :: Int -> FuzzySet -> ShowS
$cshowsPrec :: Int -> FuzzySet -> ShowS
Show)