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
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
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
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
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
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
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)