module Chez.Grater.Parser.Types where

import Chez.Grater.Internal.Prelude

import GHC.Generics (Generic)

newtype ParsedIngredientName = ParsedIngredientName { ParsedIngredientName -> CI Text
unParsedIngredientName :: CI Text }
  deriving (ParsedIngredientName -> ParsedIngredientName -> Bool
(ParsedIngredientName -> ParsedIngredientName -> Bool)
-> (ParsedIngredientName -> ParsedIngredientName -> Bool)
-> Eq ParsedIngredientName
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ParsedIngredientName -> ParsedIngredientName -> Bool
$c/= :: ParsedIngredientName -> ParsedIngredientName -> Bool
== :: ParsedIngredientName -> ParsedIngredientName -> Bool
$c== :: ParsedIngredientName -> ParsedIngredientName -> Bool
Eq, Eq ParsedIngredientName
Eq ParsedIngredientName
-> (ParsedIngredientName -> ParsedIngredientName -> Ordering)
-> (ParsedIngredientName -> ParsedIngredientName -> Bool)
-> (ParsedIngredientName -> ParsedIngredientName -> Bool)
-> (ParsedIngredientName -> ParsedIngredientName -> Bool)
-> (ParsedIngredientName -> ParsedIngredientName -> Bool)
-> (ParsedIngredientName
    -> ParsedIngredientName -> ParsedIngredientName)
-> (ParsedIngredientName
    -> ParsedIngredientName -> ParsedIngredientName)
-> Ord ParsedIngredientName
ParsedIngredientName -> ParsedIngredientName -> Bool
ParsedIngredientName -> ParsedIngredientName -> Ordering
ParsedIngredientName
-> ParsedIngredientName -> ParsedIngredientName
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ParsedIngredientName
-> ParsedIngredientName -> ParsedIngredientName
$cmin :: ParsedIngredientName
-> ParsedIngredientName -> ParsedIngredientName
max :: ParsedIngredientName
-> ParsedIngredientName -> ParsedIngredientName
$cmax :: ParsedIngredientName
-> ParsedIngredientName -> ParsedIngredientName
>= :: ParsedIngredientName -> ParsedIngredientName -> Bool
$c>= :: ParsedIngredientName -> ParsedIngredientName -> Bool
> :: ParsedIngredientName -> ParsedIngredientName -> Bool
$c> :: ParsedIngredientName -> ParsedIngredientName -> Bool
<= :: ParsedIngredientName -> ParsedIngredientName -> Bool
$c<= :: ParsedIngredientName -> ParsedIngredientName -> Bool
< :: ParsedIngredientName -> ParsedIngredientName -> Bool
$c< :: ParsedIngredientName -> ParsedIngredientName -> Bool
compare :: ParsedIngredientName -> ParsedIngredientName -> Ordering
$ccompare :: ParsedIngredientName -> ParsedIngredientName -> Ordering
$cp1Ord :: Eq ParsedIngredientName
Ord, Int -> ParsedIngredientName -> ShowS
[ParsedIngredientName] -> ShowS
ParsedIngredientName -> String
(Int -> ParsedIngredientName -> ShowS)
-> (ParsedIngredientName -> String)
-> ([ParsedIngredientName] -> ShowS)
-> Show ParsedIngredientName
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ParsedIngredientName] -> ShowS
$cshowList :: [ParsedIngredientName] -> ShowS
show :: ParsedIngredientName -> String
$cshow :: ParsedIngredientName -> String
showsPrec :: Int -> ParsedIngredientName -> ShowS
$cshowsPrec :: Int -> ParsedIngredientName -> ShowS
Show, (forall x. ParsedIngredientName -> Rep ParsedIngredientName x)
-> (forall x. Rep ParsedIngredientName x -> ParsedIngredientName)
-> Generic ParsedIngredientName
forall x. Rep ParsedIngredientName x -> ParsedIngredientName
forall x. ParsedIngredientName -> Rep ParsedIngredientName x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ParsedIngredientName x -> ParsedIngredientName
$cfrom :: forall x. ParsedIngredientName -> Rep ParsedIngredientName x
Generic)

data ParsedQuantity
  = ParsedQuantity Double
  -- ^The quantity is a number.
  | ParsedQuantityWord (CI Text)
  -- ^The quantity is a word.
  | ParsedQuantityMissing
  -- ^There was no detected quantity.
  deriving (ParsedQuantity -> ParsedQuantity -> Bool
(ParsedQuantity -> ParsedQuantity -> Bool)
-> (ParsedQuantity -> ParsedQuantity -> Bool) -> Eq ParsedQuantity
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ParsedQuantity -> ParsedQuantity -> Bool
$c/= :: ParsedQuantity -> ParsedQuantity -> Bool
== :: ParsedQuantity -> ParsedQuantity -> Bool
$c== :: ParsedQuantity -> ParsedQuantity -> Bool
Eq, Eq ParsedQuantity
Eq ParsedQuantity
-> (ParsedQuantity -> ParsedQuantity -> Ordering)
-> (ParsedQuantity -> ParsedQuantity -> Bool)
-> (ParsedQuantity -> ParsedQuantity -> Bool)
-> (ParsedQuantity -> ParsedQuantity -> Bool)
-> (ParsedQuantity -> ParsedQuantity -> Bool)
-> (ParsedQuantity -> ParsedQuantity -> ParsedQuantity)
-> (ParsedQuantity -> ParsedQuantity -> ParsedQuantity)
-> Ord ParsedQuantity
ParsedQuantity -> ParsedQuantity -> Bool
ParsedQuantity -> ParsedQuantity -> Ordering
ParsedQuantity -> ParsedQuantity -> ParsedQuantity
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ParsedQuantity -> ParsedQuantity -> ParsedQuantity
$cmin :: ParsedQuantity -> ParsedQuantity -> ParsedQuantity
max :: ParsedQuantity -> ParsedQuantity -> ParsedQuantity
$cmax :: ParsedQuantity -> ParsedQuantity -> ParsedQuantity
>= :: ParsedQuantity -> ParsedQuantity -> Bool
$c>= :: ParsedQuantity -> ParsedQuantity -> Bool
> :: ParsedQuantity -> ParsedQuantity -> Bool
$c> :: ParsedQuantity -> ParsedQuantity -> Bool
<= :: ParsedQuantity -> ParsedQuantity -> Bool
$c<= :: ParsedQuantity -> ParsedQuantity -> Bool
< :: ParsedQuantity -> ParsedQuantity -> Bool
$c< :: ParsedQuantity -> ParsedQuantity -> Bool
compare :: ParsedQuantity -> ParsedQuantity -> Ordering
$ccompare :: ParsedQuantity -> ParsedQuantity -> Ordering
$cp1Ord :: Eq ParsedQuantity
Ord, Int -> ParsedQuantity -> ShowS
[ParsedQuantity] -> ShowS
ParsedQuantity -> String
(Int -> ParsedQuantity -> ShowS)
-> (ParsedQuantity -> String)
-> ([ParsedQuantity] -> ShowS)
-> Show ParsedQuantity
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ParsedQuantity] -> ShowS
$cshowList :: [ParsedQuantity] -> ShowS
show :: ParsedQuantity -> String
$cshow :: ParsedQuantity -> String
showsPrec :: Int -> ParsedQuantity -> ShowS
$cshowsPrec :: Int -> ParsedQuantity -> ShowS
Show)

data ParsedUnit
  = ParsedUnit (CI Text)
  -- ^Detected a unit.
  | ParsedUnitMissing
  -- ^There was no detected unit.
  deriving (ParsedUnit -> ParsedUnit -> Bool
(ParsedUnit -> ParsedUnit -> Bool)
-> (ParsedUnit -> ParsedUnit -> Bool) -> Eq ParsedUnit
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ParsedUnit -> ParsedUnit -> Bool
$c/= :: ParsedUnit -> ParsedUnit -> Bool
== :: ParsedUnit -> ParsedUnit -> Bool
$c== :: ParsedUnit -> ParsedUnit -> Bool
Eq, Eq ParsedUnit
Eq ParsedUnit
-> (ParsedUnit -> ParsedUnit -> Ordering)
-> (ParsedUnit -> ParsedUnit -> Bool)
-> (ParsedUnit -> ParsedUnit -> Bool)
-> (ParsedUnit -> ParsedUnit -> Bool)
-> (ParsedUnit -> ParsedUnit -> Bool)
-> (ParsedUnit -> ParsedUnit -> ParsedUnit)
-> (ParsedUnit -> ParsedUnit -> ParsedUnit)
-> Ord ParsedUnit
ParsedUnit -> ParsedUnit -> Bool
ParsedUnit -> ParsedUnit -> Ordering
ParsedUnit -> ParsedUnit -> ParsedUnit
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ParsedUnit -> ParsedUnit -> ParsedUnit
$cmin :: ParsedUnit -> ParsedUnit -> ParsedUnit
max :: ParsedUnit -> ParsedUnit -> ParsedUnit
$cmax :: ParsedUnit -> ParsedUnit -> ParsedUnit
>= :: ParsedUnit -> ParsedUnit -> Bool
$c>= :: ParsedUnit -> ParsedUnit -> Bool
> :: ParsedUnit -> ParsedUnit -> Bool
$c> :: ParsedUnit -> ParsedUnit -> Bool
<= :: ParsedUnit -> ParsedUnit -> Bool
$c<= :: ParsedUnit -> ParsedUnit -> Bool
< :: ParsedUnit -> ParsedUnit -> Bool
$c< :: ParsedUnit -> ParsedUnit -> Bool
compare :: ParsedUnit -> ParsedUnit -> Ordering
$ccompare :: ParsedUnit -> ParsedUnit -> Ordering
$cp1Ord :: Eq ParsedUnit
Ord, Int -> ParsedUnit -> ShowS
[ParsedUnit] -> ShowS
ParsedUnit -> String
(Int -> ParsedUnit -> ShowS)
-> (ParsedUnit -> String)
-> ([ParsedUnit] -> ShowS)
-> Show ParsedUnit
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ParsedUnit] -> ShowS
$cshowList :: [ParsedUnit] -> ShowS
show :: ParsedUnit -> String
$cshow :: ParsedUnit -> String
showsPrec :: Int -> ParsedUnit -> ShowS
$cshowsPrec :: Int -> ParsedUnit -> ShowS
Show)

data ParsedIngredient = ParsedIngredient
  { ParsedIngredient -> ParsedIngredientName
parsedIngredientName     :: ParsedIngredientName
  , ParsedIngredient -> ParsedQuantity
parsedIngredientQuantity :: ParsedQuantity
  , ParsedIngredient -> ParsedUnit
parsedIngredientUnit     :: ParsedUnit
  }
  deriving (ParsedIngredient -> ParsedIngredient -> Bool
(ParsedIngredient -> ParsedIngredient -> Bool)
-> (ParsedIngredient -> ParsedIngredient -> Bool)
-> Eq ParsedIngredient
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ParsedIngredient -> ParsedIngredient -> Bool
$c/= :: ParsedIngredient -> ParsedIngredient -> Bool
== :: ParsedIngredient -> ParsedIngredient -> Bool
$c== :: ParsedIngredient -> ParsedIngredient -> Bool
Eq, Eq ParsedIngredient
Eq ParsedIngredient
-> (ParsedIngredient -> ParsedIngredient -> Ordering)
-> (ParsedIngredient -> ParsedIngredient -> Bool)
-> (ParsedIngredient -> ParsedIngredient -> Bool)
-> (ParsedIngredient -> ParsedIngredient -> Bool)
-> (ParsedIngredient -> ParsedIngredient -> Bool)
-> (ParsedIngredient -> ParsedIngredient -> ParsedIngredient)
-> (ParsedIngredient -> ParsedIngredient -> ParsedIngredient)
-> Ord ParsedIngredient
ParsedIngredient -> ParsedIngredient -> Bool
ParsedIngredient -> ParsedIngredient -> Ordering
ParsedIngredient -> ParsedIngredient -> ParsedIngredient
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ParsedIngredient -> ParsedIngredient -> ParsedIngredient
$cmin :: ParsedIngredient -> ParsedIngredient -> ParsedIngredient
max :: ParsedIngredient -> ParsedIngredient -> ParsedIngredient
$cmax :: ParsedIngredient -> ParsedIngredient -> ParsedIngredient
>= :: ParsedIngredient -> ParsedIngredient -> Bool
$c>= :: ParsedIngredient -> ParsedIngredient -> Bool
> :: ParsedIngredient -> ParsedIngredient -> Bool
$c> :: ParsedIngredient -> ParsedIngredient -> Bool
<= :: ParsedIngredient -> ParsedIngredient -> Bool
$c<= :: ParsedIngredient -> ParsedIngredient -> Bool
< :: ParsedIngredient -> ParsedIngredient -> Bool
$c< :: ParsedIngredient -> ParsedIngredient -> Bool
compare :: ParsedIngredient -> ParsedIngredient -> Ordering
$ccompare :: ParsedIngredient -> ParsedIngredient -> Ordering
$cp1Ord :: Eq ParsedIngredient
Ord, Int -> ParsedIngredient -> ShowS
[ParsedIngredient] -> ShowS
ParsedIngredient -> String
(Int -> ParsedIngredient -> ShowS)
-> (ParsedIngredient -> String)
-> ([ParsedIngredient] -> ShowS)
-> Show ParsedIngredient
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ParsedIngredient] -> ShowS
$cshowList :: [ParsedIngredient] -> ShowS
show :: ParsedIngredient -> String
$cshow :: ParsedIngredient -> String
showsPrec :: Int -> ParsedIngredient -> ShowS
$cshowsPrec :: Int -> ParsedIngredient -> ShowS
Show)