module Satyros.QFIDL.Expressible where

import           GHC.Generics           (Generic)
import           Satyros.QFIDL.Variable (Variable)

data Expressible
  = Singleton Variable Operator Double
  | Difference Variable Variable Operator Double
  deriving stock ((forall x. Expressible -> Rep Expressible x)
-> (forall x. Rep Expressible x -> Expressible)
-> Generic Expressible
forall x. Rep Expressible x -> Expressible
forall x. Expressible -> Rep Expressible x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Expressible x -> Expressible
$cfrom :: forall x. Expressible -> Rep Expressible x
Generic, Expressible -> Expressible -> Bool
(Expressible -> Expressible -> Bool)
-> (Expressible -> Expressible -> Bool) -> Eq Expressible
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Expressible -> Expressible -> Bool
$c/= :: Expressible -> Expressible -> Bool
== :: Expressible -> Expressible -> Bool
$c== :: Expressible -> Expressible -> Bool
Eq, Int -> Expressible -> ShowS
[Expressible] -> ShowS
Expressible -> String
(Int -> Expressible -> ShowS)
-> (Expressible -> String)
-> ([Expressible] -> ShowS)
-> Show Expressible
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Expressible] -> ShowS
$cshowList :: [Expressible] -> ShowS
show :: Expressible -> String
$cshow :: Expressible -> String
showsPrec :: Int -> Expressible -> ShowS
$cshowsPrec :: Int -> Expressible -> ShowS
Show)

data Operator
  = (::<?)
  | (::<=?)
  | (::>?)
  | (::>=?)
  | (::=?)
  | (::<>?)
  deriving stock ((forall x. Operator -> Rep Operator x)
-> (forall x. Rep Operator x -> Operator) -> Generic Operator
forall x. Rep Operator x -> Operator
forall x. Operator -> Rep Operator x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Operator x -> Operator
$cfrom :: forall x. Operator -> Rep Operator x
Generic, Operator -> Operator -> Bool
(Operator -> Operator -> Bool)
-> (Operator -> Operator -> Bool) -> Eq Operator
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Operator -> Operator -> Bool
$c/= :: Operator -> Operator -> Bool
== :: Operator -> Operator -> Bool
$c== :: Operator -> Operator -> Bool
Eq, Int -> Operator -> ShowS
[Operator] -> ShowS
Operator -> String
(Int -> Operator -> ShowS)
-> (Operator -> String) -> ([Operator] -> ShowS) -> Show Operator
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Operator] -> ShowS
$cshowList :: [Operator] -> ShowS
show :: Operator -> String
$cshow :: Operator -> String
showsPrec :: Int -> Operator -> ShowS
$cshowsPrec :: Int -> Operator -> ShowS
Show, ReadPrec [Operator]
ReadPrec Operator
Int -> ReadS Operator
ReadS [Operator]
(Int -> ReadS Operator)
-> ReadS [Operator]
-> ReadPrec Operator
-> ReadPrec [Operator]
-> Read Operator
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Operator]
$creadListPrec :: ReadPrec [Operator]
readPrec :: ReadPrec Operator
$creadPrec :: ReadPrec Operator
readList :: ReadS [Operator]
$creadList :: ReadS [Operator]
readsPrec :: Int -> ReadS Operator
$creadsPrec :: Int -> ReadS Operator
Read)