{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
module Subject.Value
( Value (..)
, RangeValue (..)
) where
import Data.Hashable (Hashable (..))
import Data.Map (Map)
import GHC.Generics (Generic)
data RangeValue = RangeValue
{ RangeValue -> Maybe Double
lower :: Maybe Double
, RangeValue -> Maybe Double
upper :: Maybe Double
}
deriving (RangeValue -> RangeValue -> Bool
(RangeValue -> RangeValue -> Bool)
-> (RangeValue -> RangeValue -> Bool) -> Eq RangeValue
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RangeValue -> RangeValue -> Bool
== :: RangeValue -> RangeValue -> Bool
$c/= :: RangeValue -> RangeValue -> Bool
/= :: RangeValue -> RangeValue -> Bool
Eq, Eq RangeValue
Eq RangeValue =>
(RangeValue -> RangeValue -> Ordering)
-> (RangeValue -> RangeValue -> Bool)
-> (RangeValue -> RangeValue -> Bool)
-> (RangeValue -> RangeValue -> Bool)
-> (RangeValue -> RangeValue -> Bool)
-> (RangeValue -> RangeValue -> RangeValue)
-> (RangeValue -> RangeValue -> RangeValue)
-> Ord RangeValue
RangeValue -> RangeValue -> Bool
RangeValue -> RangeValue -> Ordering
RangeValue -> RangeValue -> RangeValue
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
$ccompare :: RangeValue -> RangeValue -> Ordering
compare :: RangeValue -> RangeValue -> Ordering
$c< :: RangeValue -> RangeValue -> Bool
< :: RangeValue -> RangeValue -> Bool
$c<= :: RangeValue -> RangeValue -> Bool
<= :: RangeValue -> RangeValue -> Bool
$c> :: RangeValue -> RangeValue -> Bool
> :: RangeValue -> RangeValue -> Bool
$c>= :: RangeValue -> RangeValue -> Bool
>= :: RangeValue -> RangeValue -> Bool
$cmax :: RangeValue -> RangeValue -> RangeValue
max :: RangeValue -> RangeValue -> RangeValue
$cmin :: RangeValue -> RangeValue -> RangeValue
min :: RangeValue -> RangeValue -> RangeValue
Ord, Int -> RangeValue -> ShowS
[RangeValue] -> ShowS
RangeValue -> String
(Int -> RangeValue -> ShowS)
-> (RangeValue -> String)
-> ([RangeValue] -> ShowS)
-> Show RangeValue
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RangeValue -> ShowS
showsPrec :: Int -> RangeValue -> ShowS
$cshow :: RangeValue -> String
show :: RangeValue -> String
$cshowList :: [RangeValue] -> ShowS
showList :: [RangeValue] -> ShowS
Show, (forall x. RangeValue -> Rep RangeValue x)
-> (forall x. Rep RangeValue x -> RangeValue) -> Generic RangeValue
forall x. Rep RangeValue x -> RangeValue
forall x. RangeValue -> Rep RangeValue x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. RangeValue -> Rep RangeValue x
from :: forall x. RangeValue -> Rep RangeValue x
$cto :: forall x. Rep RangeValue x -> RangeValue
to :: forall x. Rep RangeValue x -> RangeValue
Generic, Eq RangeValue
Eq RangeValue =>
(Int -> RangeValue -> Int)
-> (RangeValue -> Int) -> Hashable RangeValue
Int -> RangeValue -> Int
RangeValue -> Int
forall a. Eq a => (Int -> a -> Int) -> (a -> Int) -> Hashable a
$chashWithSalt :: Int -> RangeValue -> Int
hashWithSalt :: Int -> RangeValue -> Int
$chash :: RangeValue -> Int
hash :: RangeValue -> Int
Hashable)
data Value
= VInteger Integer
| VDecimal Double
| VBoolean Bool
| VString String
| VSymbol String
| VTaggedString String String
| VArray [Value]
| VMap (Map String Value)
| VRange RangeValue
| VMeasurement String Double
deriving (Value -> Value -> Bool
(Value -> Value -> Bool) -> (Value -> Value -> Bool) -> Eq Value
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Value -> Value -> Bool
== :: Value -> Value -> Bool
$c/= :: Value -> Value -> Bool
/= :: Value -> Value -> Bool
Eq, Eq Value
Eq Value =>
(Value -> Value -> Ordering)
-> (Value -> Value -> Bool)
-> (Value -> Value -> Bool)
-> (Value -> Value -> Bool)
-> (Value -> Value -> Bool)
-> (Value -> Value -> Value)
-> (Value -> Value -> Value)
-> Ord Value
Value -> Value -> Bool
Value -> Value -> Ordering
Value -> Value -> Value
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
$ccompare :: Value -> Value -> Ordering
compare :: Value -> Value -> Ordering
$c< :: Value -> Value -> Bool
< :: Value -> Value -> Bool
$c<= :: Value -> Value -> Bool
<= :: Value -> Value -> Bool
$c> :: Value -> Value -> Bool
> :: Value -> Value -> Bool
$c>= :: Value -> Value -> Bool
>= :: Value -> Value -> Bool
$cmax :: Value -> Value -> Value
max :: Value -> Value -> Value
$cmin :: Value -> Value -> Value
min :: Value -> Value -> Value
Ord, Int -> Value -> ShowS
[Value] -> ShowS
Value -> String
(Int -> Value -> ShowS)
-> (Value -> String) -> ([Value] -> ShowS) -> Show Value
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Value -> ShowS
showsPrec :: Int -> Value -> ShowS
$cshow :: Value -> String
show :: Value -> String
$cshowList :: [Value] -> ShowS
showList :: [Value] -> ShowS
Show, (forall x. Value -> Rep Value x)
-> (forall x. Rep Value x -> Value) -> Generic Value
forall x. Rep Value x -> Value
forall x. Value -> Rep Value x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Value -> Rep Value x
from :: forall x. Value -> Rep Value x
$cto :: forall x. Rep Value x -> Value
to :: forall x. Rep Value x -> Value
Generic, Eq Value
Eq Value =>
(Int -> Value -> Int) -> (Value -> Int) -> Hashable Value
Int -> Value -> Int
Value -> Int
forall a. Eq a => (Int -> a -> Int) -> (a -> Int) -> Hashable a
$chashWithSalt :: Int -> Value -> Int
hashWithSalt :: Int -> Value -> Int
$chash :: Value -> Int
hash :: Value -> Int
Hashable)