module Satyros.QFIDL.Expressible where

import           Satyros.QFIDL.Variable (Variable)

data Expressible
  = Singleton Variable Operator Double
  | Difference Variable Variable Operator Double
  deriving stock (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 (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)