module Telescope.Fits.Header.Value where

import Data.Text (Text)


-- | `Value` datatype for discriminating valid FITS KEYWORD=VALUE types in an HDU.
data Value
  = Integer Int
  | Float Double
  | String Text
  | Logic LogicalConstant
  deriving (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, 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)


-- | Direct encoding of a `Bool` for parsing `Value`
data LogicalConstant = T | F
  deriving (Int -> LogicalConstant -> ShowS
[LogicalConstant] -> ShowS
LogicalConstant -> String
(Int -> LogicalConstant -> ShowS)
-> (LogicalConstant -> String)
-> ([LogicalConstant] -> ShowS)
-> Show LogicalConstant
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> LogicalConstant -> ShowS
showsPrec :: Int -> LogicalConstant -> ShowS
$cshow :: LogicalConstant -> String
show :: LogicalConstant -> String
$cshowList :: [LogicalConstant] -> ShowS
showList :: [LogicalConstant] -> ShowS
Show, LogicalConstant -> LogicalConstant -> Bool
(LogicalConstant -> LogicalConstant -> Bool)
-> (LogicalConstant -> LogicalConstant -> Bool)
-> Eq LogicalConstant
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: LogicalConstant -> LogicalConstant -> Bool
== :: LogicalConstant -> LogicalConstant -> Bool
$c/= :: LogicalConstant -> LogicalConstant -> Bool
/= :: LogicalConstant -> LogicalConstant -> Bool
Eq)