module CookieTray.Types where

import Data.ByteString qualified as BS
import Data.ByteString.Lazy qualified as LBS
import Data.String (IsString)
import Data.Time (DiffTime, UTCTime)
import Prelude (Eq, Functor, Ord, Show)

newtype Name = Name {Name -> ByteString
nameByteString :: BS.ByteString}
  deriving newtype (Name -> Name -> Bool
(Name -> Name -> Bool) -> (Name -> Name -> Bool) -> Eq Name
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Name -> Name -> Bool
== :: Name -> Name -> Bool
$c/= :: Name -> Name -> Bool
/= :: Name -> Name -> Bool
Eq, Eq Name
Eq Name =>
(Name -> Name -> Ordering)
-> (Name -> Name -> Bool)
-> (Name -> Name -> Bool)
-> (Name -> Name -> Bool)
-> (Name -> Name -> Bool)
-> (Name -> Name -> Name)
-> (Name -> Name -> Name)
-> Ord Name
Name -> Name -> Bool
Name -> Name -> Ordering
Name -> Name -> Name
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 :: Name -> Name -> Ordering
compare :: Name -> Name -> Ordering
$c< :: Name -> Name -> Bool
< :: Name -> Name -> Bool
$c<= :: Name -> Name -> Bool
<= :: Name -> Name -> Bool
$c> :: Name -> Name -> Bool
> :: Name -> Name -> Bool
$c>= :: Name -> Name -> Bool
>= :: Name -> Name -> Bool
$cmax :: Name -> Name -> Name
max :: Name -> Name -> Name
$cmin :: Name -> Name -> Name
min :: Name -> Name -> Name
Ord, Int -> Name -> ShowS
[Name] -> ShowS
Name -> String
(Int -> Name -> ShowS)
-> (Name -> String) -> ([Name] -> ShowS) -> Show Name
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Name -> ShowS
showsPrec :: Int -> Name -> ShowS
$cshow :: Name -> String
show :: Name -> String
$cshowList :: [Name] -> ShowS
showList :: [Name] -> ShowS
Show, String -> Name
(String -> Name) -> IsString Name
forall a. (String -> a) -> IsString a
$cfromString :: String -> Name
fromString :: String -> Name
IsString)

data Named a = Named {forall a. Named a -> Name
name :: Name, forall a. Named a -> a
value :: a}
  deriving stock (Named a -> Named a -> Bool
(Named a -> Named a -> Bool)
-> (Named a -> Named a -> Bool) -> Eq (Named a)
forall a. Eq a => Named a -> Named a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => Named a -> Named a -> Bool
== :: Named a -> Named a -> Bool
$c/= :: forall a. Eq a => Named a -> Named a -> Bool
/= :: Named a -> Named a -> Bool
Eq, Eq (Named a)
Eq (Named a) =>
(Named a -> Named a -> Ordering)
-> (Named a -> Named a -> Bool)
-> (Named a -> Named a -> Bool)
-> (Named a -> Named a -> Bool)
-> (Named a -> Named a -> Bool)
-> (Named a -> Named a -> Named a)
-> (Named a -> Named a -> Named a)
-> Ord (Named a)
Named a -> Named a -> Bool
Named a -> Named a -> Ordering
Named a -> Named a -> Named a
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
forall a. Ord a => Eq (Named a)
forall a. Ord a => Named a -> Named a -> Bool
forall a. Ord a => Named a -> Named a -> Ordering
forall a. Ord a => Named a -> Named a -> Named a
$ccompare :: forall a. Ord a => Named a -> Named a -> Ordering
compare :: Named a -> Named a -> Ordering
$c< :: forall a. Ord a => Named a -> Named a -> Bool
< :: Named a -> Named a -> Bool
$c<= :: forall a. Ord a => Named a -> Named a -> Bool
<= :: Named a -> Named a -> Bool
$c> :: forall a. Ord a => Named a -> Named a -> Bool
> :: Named a -> Named a -> Bool
$c>= :: forall a. Ord a => Named a -> Named a -> Bool
>= :: Named a -> Named a -> Bool
$cmax :: forall a. Ord a => Named a -> Named a -> Named a
max :: Named a -> Named a -> Named a
$cmin :: forall a. Ord a => Named a -> Named a -> Named a
min :: Named a -> Named a -> Named a
Ord, Int -> Named a -> ShowS
[Named a] -> ShowS
Named a -> String
(Int -> Named a -> ShowS)
-> (Named a -> String) -> ([Named a] -> ShowS) -> Show (Named a)
forall a. Show a => Int -> Named a -> ShowS
forall a. Show a => [Named a] -> ShowS
forall a. Show a => Named a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> Named a -> ShowS
showsPrec :: Int -> Named a -> ShowS
$cshow :: forall a. Show a => Named a -> String
show :: Named a -> String
$cshowList :: forall a. Show a => [Named a] -> ShowS
showList :: [Named a] -> ShowS
Show)

newtype Value = Value {Value -> ByteString
valueByteString :: BS.ByteString}
  deriving newtype (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, String -> Value
(String -> Value) -> IsString Value
forall a. (String -> a) -> IsString a
$cfromString :: String -> Value
fromString :: String -> Value
IsString)

-- | The raw content of a set-cookie header
newtype BinaryCommand = BinaryCommand {BinaryCommand -> ByteString
binaryCommandByteStringLazy :: LBS.ByteString}
  deriving newtype (BinaryCommand -> BinaryCommand -> Bool
(BinaryCommand -> BinaryCommand -> Bool)
-> (BinaryCommand -> BinaryCommand -> Bool) -> Eq BinaryCommand
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: BinaryCommand -> BinaryCommand -> Bool
== :: BinaryCommand -> BinaryCommand -> Bool
$c/= :: BinaryCommand -> BinaryCommand -> Bool
/= :: BinaryCommand -> BinaryCommand -> Bool
Eq, Eq BinaryCommand
Eq BinaryCommand =>
(BinaryCommand -> BinaryCommand -> Ordering)
-> (BinaryCommand -> BinaryCommand -> Bool)
-> (BinaryCommand -> BinaryCommand -> Bool)
-> (BinaryCommand -> BinaryCommand -> Bool)
-> (BinaryCommand -> BinaryCommand -> Bool)
-> (BinaryCommand -> BinaryCommand -> BinaryCommand)
-> (BinaryCommand -> BinaryCommand -> BinaryCommand)
-> Ord BinaryCommand
BinaryCommand -> BinaryCommand -> Bool
BinaryCommand -> BinaryCommand -> Ordering
BinaryCommand -> BinaryCommand -> BinaryCommand
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 :: BinaryCommand -> BinaryCommand -> Ordering
compare :: BinaryCommand -> BinaryCommand -> Ordering
$c< :: BinaryCommand -> BinaryCommand -> Bool
< :: BinaryCommand -> BinaryCommand -> Bool
$c<= :: BinaryCommand -> BinaryCommand -> Bool
<= :: BinaryCommand -> BinaryCommand -> Bool
$c> :: BinaryCommand -> BinaryCommand -> Bool
> :: BinaryCommand -> BinaryCommand -> Bool
$c>= :: BinaryCommand -> BinaryCommand -> Bool
>= :: BinaryCommand -> BinaryCommand -> Bool
$cmax :: BinaryCommand -> BinaryCommand -> BinaryCommand
max :: BinaryCommand -> BinaryCommand -> BinaryCommand
$cmin :: BinaryCommand -> BinaryCommand -> BinaryCommand
min :: BinaryCommand -> BinaryCommand -> BinaryCommand
Ord, Int -> BinaryCommand -> ShowS
[BinaryCommand] -> ShowS
BinaryCommand -> String
(Int -> BinaryCommand -> ShowS)
-> (BinaryCommand -> String)
-> ([BinaryCommand] -> ShowS)
-> Show BinaryCommand
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> BinaryCommand -> ShowS
showsPrec :: Int -> BinaryCommand -> ShowS
$cshow :: BinaryCommand -> String
show :: BinaryCommand -> String
$cshowList :: [BinaryCommand] -> ShowS
showList :: [BinaryCommand] -> ShowS
Show, String -> BinaryCommand
(String -> BinaryCommand) -> IsString BinaryCommand
forall a. (String -> a) -> IsString a
$cfromString :: String -> BinaryCommand
fromString :: String -> BinaryCommand
IsString)

data JavascriptAccess
  = -- | HttpOnly; javascript cannot access the cookie
    HiddenFromJavascript
  | -- | Cookie will be accessible from javascript,
    -- see https://developer.mozilla.org/en-US/docs/web/api/document/cookie
    AccessibleFromJavascript
  deriving (JavascriptAccess -> JavascriptAccess -> Bool
(JavascriptAccess -> JavascriptAccess -> Bool)
-> (JavascriptAccess -> JavascriptAccess -> Bool)
-> Eq JavascriptAccess
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JavascriptAccess -> JavascriptAccess -> Bool
== :: JavascriptAccess -> JavascriptAccess -> Bool
$c/= :: JavascriptAccess -> JavascriptAccess -> Bool
/= :: JavascriptAccess -> JavascriptAccess -> Bool
Eq, Eq JavascriptAccess
Eq JavascriptAccess =>
(JavascriptAccess -> JavascriptAccess -> Ordering)
-> (JavascriptAccess -> JavascriptAccess -> Bool)
-> (JavascriptAccess -> JavascriptAccess -> Bool)
-> (JavascriptAccess -> JavascriptAccess -> Bool)
-> (JavascriptAccess -> JavascriptAccess -> Bool)
-> (JavascriptAccess -> JavascriptAccess -> JavascriptAccess)
-> (JavascriptAccess -> JavascriptAccess -> JavascriptAccess)
-> Ord JavascriptAccess
JavascriptAccess -> JavascriptAccess -> Bool
JavascriptAccess -> JavascriptAccess -> Ordering
JavascriptAccess -> JavascriptAccess -> JavascriptAccess
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 :: JavascriptAccess -> JavascriptAccess -> Ordering
compare :: JavascriptAccess -> JavascriptAccess -> Ordering
$c< :: JavascriptAccess -> JavascriptAccess -> Bool
< :: JavascriptAccess -> JavascriptAccess -> Bool
$c<= :: JavascriptAccess -> JavascriptAccess -> Bool
<= :: JavascriptAccess -> JavascriptAccess -> Bool
$c> :: JavascriptAccess -> JavascriptAccess -> Bool
> :: JavascriptAccess -> JavascriptAccess -> Bool
$c>= :: JavascriptAccess -> JavascriptAccess -> Bool
>= :: JavascriptAccess -> JavascriptAccess -> Bool
$cmax :: JavascriptAccess -> JavascriptAccess -> JavascriptAccess
max :: JavascriptAccess -> JavascriptAccess -> JavascriptAccess
$cmin :: JavascriptAccess -> JavascriptAccess -> JavascriptAccess
min :: JavascriptAccess -> JavascriptAccess -> JavascriptAccess
Ord, Int -> JavascriptAccess -> ShowS
[JavascriptAccess] -> ShowS
JavascriptAccess -> String
(Int -> JavascriptAccess -> ShowS)
-> (JavascriptAccess -> String)
-> ([JavascriptAccess] -> ShowS)
-> Show JavascriptAccess
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JavascriptAccess -> ShowS
showsPrec :: Int -> JavascriptAccess -> ShowS
$cshow :: JavascriptAccess -> String
show :: JavascriptAccess -> String
$cshowList :: [JavascriptAccess] -> ShowS
showList :: [JavascriptAccess] -> ShowS
Show)

data TransportEncryption
  = -- | The browser only sends cookies over HTTP, not HTTP
    RequireEncryptedTransport
  | -- | The browser sends cookies regardless of transport encryption
    AllowUnencryptedTransport
  deriving (TransportEncryption -> TransportEncryption -> Bool
(TransportEncryption -> TransportEncryption -> Bool)
-> (TransportEncryption -> TransportEncryption -> Bool)
-> Eq TransportEncryption
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TransportEncryption -> TransportEncryption -> Bool
== :: TransportEncryption -> TransportEncryption -> Bool
$c/= :: TransportEncryption -> TransportEncryption -> Bool
/= :: TransportEncryption -> TransportEncryption -> Bool
Eq, Eq TransportEncryption
Eq TransportEncryption =>
(TransportEncryption -> TransportEncryption -> Ordering)
-> (TransportEncryption -> TransportEncryption -> Bool)
-> (TransportEncryption -> TransportEncryption -> Bool)
-> (TransportEncryption -> TransportEncryption -> Bool)
-> (TransportEncryption -> TransportEncryption -> Bool)
-> (TransportEncryption
    -> TransportEncryption -> TransportEncryption)
-> (TransportEncryption
    -> TransportEncryption -> TransportEncryption)
-> Ord TransportEncryption
TransportEncryption -> TransportEncryption -> Bool
TransportEncryption -> TransportEncryption -> Ordering
TransportEncryption -> TransportEncryption -> TransportEncryption
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 :: TransportEncryption -> TransportEncryption -> Ordering
compare :: TransportEncryption -> TransportEncryption -> Ordering
$c< :: TransportEncryption -> TransportEncryption -> Bool
< :: TransportEncryption -> TransportEncryption -> Bool
$c<= :: TransportEncryption -> TransportEncryption -> Bool
<= :: TransportEncryption -> TransportEncryption -> Bool
$c> :: TransportEncryption -> TransportEncryption -> Bool
> :: TransportEncryption -> TransportEncryption -> Bool
$c>= :: TransportEncryption -> TransportEncryption -> Bool
>= :: TransportEncryption -> TransportEncryption -> Bool
$cmax :: TransportEncryption -> TransportEncryption -> TransportEncryption
max :: TransportEncryption -> TransportEncryption -> TransportEncryption
$cmin :: TransportEncryption -> TransportEncryption -> TransportEncryption
min :: TransportEncryption -> TransportEncryption -> TransportEncryption
Ord, Int -> TransportEncryption -> ShowS
[TransportEncryption] -> ShowS
TransportEncryption -> String
(Int -> TransportEncryption -> ShowS)
-> (TransportEncryption -> String)
-> ([TransportEncryption] -> ShowS)
-> Show TransportEncryption
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TransportEncryption -> ShowS
showsPrec :: Int -> TransportEncryption -> ShowS
$cshow :: TransportEncryption -> String
show :: TransportEncryption -> String
$cshowList :: [TransportEncryption] -> ShowS
showList :: [TransportEncryption] -> ShowS
Show)

data Origin
  = SameSite SameSiteOptions
  | -- | Instruct the client to send the cookie for all requests,
    -- even those originating from a third party.
    -- This option implies 'RequireEncryptedTransport'.
    CrossSite
  deriving (Origin -> Origin -> Bool
(Origin -> Origin -> Bool)
-> (Origin -> Origin -> Bool) -> Eq Origin
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Origin -> Origin -> Bool
== :: Origin -> Origin -> Bool
$c/= :: Origin -> Origin -> Bool
/= :: Origin -> Origin -> Bool
Eq, Eq Origin
Eq Origin =>
(Origin -> Origin -> Ordering)
-> (Origin -> Origin -> Bool)
-> (Origin -> Origin -> Bool)
-> (Origin -> Origin -> Bool)
-> (Origin -> Origin -> Bool)
-> (Origin -> Origin -> Origin)
-> (Origin -> Origin -> Origin)
-> Ord Origin
Origin -> Origin -> Bool
Origin -> Origin -> Ordering
Origin -> Origin -> Origin
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 :: Origin -> Origin -> Ordering
compare :: Origin -> Origin -> Ordering
$c< :: Origin -> Origin -> Bool
< :: Origin -> Origin -> Bool
$c<= :: Origin -> Origin -> Bool
<= :: Origin -> Origin -> Bool
$c> :: Origin -> Origin -> Bool
> :: Origin -> Origin -> Bool
$c>= :: Origin -> Origin -> Bool
>= :: Origin -> Origin -> Bool
$cmax :: Origin -> Origin -> Origin
max :: Origin -> Origin -> Origin
$cmin :: Origin -> Origin -> Origin
min :: Origin -> Origin -> Origin
Ord, Int -> Origin -> ShowS
[Origin] -> ShowS
Origin -> String
(Int -> Origin -> ShowS)
-> (Origin -> String) -> ([Origin] -> ShowS) -> Show Origin
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Origin -> ShowS
showsPrec :: Int -> Origin -> ShowS
$cshow :: Origin -> String
show :: Origin -> String
$cshowList :: [Origin] -> ShowS
showList :: [Origin] -> ShowS
Show)

data SameSiteOptions = SameSiteOptions
  { SameSiteOptions -> SameSiteStrictness
sameSiteStrictness :: SameSiteStrictness,
    SameSiteOptions -> TransportEncryption
transportEncryption :: TransportEncryption
  }
  deriving (SameSiteOptions -> SameSiteOptions -> Bool
(SameSiteOptions -> SameSiteOptions -> Bool)
-> (SameSiteOptions -> SameSiteOptions -> Bool)
-> Eq SameSiteOptions
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SameSiteOptions -> SameSiteOptions -> Bool
== :: SameSiteOptions -> SameSiteOptions -> Bool
$c/= :: SameSiteOptions -> SameSiteOptions -> Bool
/= :: SameSiteOptions -> SameSiteOptions -> Bool
Eq, Eq SameSiteOptions
Eq SameSiteOptions =>
(SameSiteOptions -> SameSiteOptions -> Ordering)
-> (SameSiteOptions -> SameSiteOptions -> Bool)
-> (SameSiteOptions -> SameSiteOptions -> Bool)
-> (SameSiteOptions -> SameSiteOptions -> Bool)
-> (SameSiteOptions -> SameSiteOptions -> Bool)
-> (SameSiteOptions -> SameSiteOptions -> SameSiteOptions)
-> (SameSiteOptions -> SameSiteOptions -> SameSiteOptions)
-> Ord SameSiteOptions
SameSiteOptions -> SameSiteOptions -> Bool
SameSiteOptions -> SameSiteOptions -> Ordering
SameSiteOptions -> SameSiteOptions -> SameSiteOptions
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 :: SameSiteOptions -> SameSiteOptions -> Ordering
compare :: SameSiteOptions -> SameSiteOptions -> Ordering
$c< :: SameSiteOptions -> SameSiteOptions -> Bool
< :: SameSiteOptions -> SameSiteOptions -> Bool
$c<= :: SameSiteOptions -> SameSiteOptions -> Bool
<= :: SameSiteOptions -> SameSiteOptions -> Bool
$c> :: SameSiteOptions -> SameSiteOptions -> Bool
> :: SameSiteOptions -> SameSiteOptions -> Bool
$c>= :: SameSiteOptions -> SameSiteOptions -> Bool
>= :: SameSiteOptions -> SameSiteOptions -> Bool
$cmax :: SameSiteOptions -> SameSiteOptions -> SameSiteOptions
max :: SameSiteOptions -> SameSiteOptions -> SameSiteOptions
$cmin :: SameSiteOptions -> SameSiteOptions -> SameSiteOptions
min :: SameSiteOptions -> SameSiteOptions -> SameSiteOptions
Ord, Int -> SameSiteOptions -> ShowS
[SameSiteOptions] -> ShowS
SameSiteOptions -> String
(Int -> SameSiteOptions -> ShowS)
-> (SameSiteOptions -> String)
-> ([SameSiteOptions] -> ShowS)
-> Show SameSiteOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SameSiteOptions -> ShowS
showsPrec :: Int -> SameSiteOptions -> ShowS
$cshow :: SameSiteOptions -> String
show :: SameSiteOptions -> String
$cshowList :: [SameSiteOptions] -> ShowS
showList :: [SameSiteOptions] -> ShowS
Show)

data SameSiteStrictness
  = -- | Instruct the client not to send the cookie for requests originating
    -- from another site, e.g. if a user clicked a link from another site to
    -- yours. This setting offers the strongest protection against cross-site
    -- request forgery, but does not make sense in a lot of cases. (If somebody
    -- follows a link to your site, should they appear to be logged out?)
    SameSiteStrict
  | -- | The client will send the cookie whenever your domain is what appears
    -- in the navigation bar
    SameSiteLax
  deriving (SameSiteStrictness -> SameSiteStrictness -> Bool
(SameSiteStrictness -> SameSiteStrictness -> Bool)
-> (SameSiteStrictness -> SameSiteStrictness -> Bool)
-> Eq SameSiteStrictness
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SameSiteStrictness -> SameSiteStrictness -> Bool
== :: SameSiteStrictness -> SameSiteStrictness -> Bool
$c/= :: SameSiteStrictness -> SameSiteStrictness -> Bool
/= :: SameSiteStrictness -> SameSiteStrictness -> Bool
Eq, Eq SameSiteStrictness
Eq SameSiteStrictness =>
(SameSiteStrictness -> SameSiteStrictness -> Ordering)
-> (SameSiteStrictness -> SameSiteStrictness -> Bool)
-> (SameSiteStrictness -> SameSiteStrictness -> Bool)
-> (SameSiteStrictness -> SameSiteStrictness -> Bool)
-> (SameSiteStrictness -> SameSiteStrictness -> Bool)
-> (SameSiteStrictness -> SameSiteStrictness -> SameSiteStrictness)
-> (SameSiteStrictness -> SameSiteStrictness -> SameSiteStrictness)
-> Ord SameSiteStrictness
SameSiteStrictness -> SameSiteStrictness -> Bool
SameSiteStrictness -> SameSiteStrictness -> Ordering
SameSiteStrictness -> SameSiteStrictness -> SameSiteStrictness
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 :: SameSiteStrictness -> SameSiteStrictness -> Ordering
compare :: SameSiteStrictness -> SameSiteStrictness -> Ordering
$c< :: SameSiteStrictness -> SameSiteStrictness -> Bool
< :: SameSiteStrictness -> SameSiteStrictness -> Bool
$c<= :: SameSiteStrictness -> SameSiteStrictness -> Bool
<= :: SameSiteStrictness -> SameSiteStrictness -> Bool
$c> :: SameSiteStrictness -> SameSiteStrictness -> Bool
> :: SameSiteStrictness -> SameSiteStrictness -> Bool
$c>= :: SameSiteStrictness -> SameSiteStrictness -> Bool
>= :: SameSiteStrictness -> SameSiteStrictness -> Bool
$cmax :: SameSiteStrictness -> SameSiteStrictness -> SameSiteStrictness
max :: SameSiteStrictness -> SameSiteStrictness -> SameSiteStrictness
$cmin :: SameSiteStrictness -> SameSiteStrictness -> SameSiteStrictness
min :: SameSiteStrictness -> SameSiteStrictness -> SameSiteStrictness
Ord, Int -> SameSiteStrictness -> ShowS
[SameSiteStrictness] -> ShowS
SameSiteStrictness -> String
(Int -> SameSiteStrictness -> ShowS)
-> (SameSiteStrictness -> String)
-> ([SameSiteStrictness] -> ShowS)
-> Show SameSiteStrictness
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SameSiteStrictness -> ShowS
showsPrec :: Int -> SameSiteStrictness -> ShowS
$cshow :: SameSiteStrictness -> String
show :: SameSiteStrictness -> String
$cshowList :: [SameSiteStrictness] -> ShowS
showList :: [SameSiteStrictness] -> ShowS
Show)

data Security = Security
  { Security -> JavascriptAccess
jsAccess :: JavascriptAccess,
    Security -> Origin
origin :: Origin
  }
  deriving (Security -> Security -> Bool
(Security -> Security -> Bool)
-> (Security -> Security -> Bool) -> Eq Security
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Security -> Security -> Bool
== :: Security -> Security -> Bool
$c/= :: Security -> Security -> Bool
/= :: Security -> Security -> Bool
Eq, Eq Security
Eq Security =>
(Security -> Security -> Ordering)
-> (Security -> Security -> Bool)
-> (Security -> Security -> Bool)
-> (Security -> Security -> Bool)
-> (Security -> Security -> Bool)
-> (Security -> Security -> Security)
-> (Security -> Security -> Security)
-> Ord Security
Security -> Security -> Bool
Security -> Security -> Ordering
Security -> Security -> Security
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 :: Security -> Security -> Ordering
compare :: Security -> Security -> Ordering
$c< :: Security -> Security -> Bool
< :: Security -> Security -> Bool
$c<= :: Security -> Security -> Bool
<= :: Security -> Security -> Bool
$c> :: Security -> Security -> Bool
> :: Security -> Security -> Bool
$c>= :: Security -> Security -> Bool
>= :: Security -> Security -> Bool
$cmax :: Security -> Security -> Security
max :: Security -> Security -> Security
$cmin :: Security -> Security -> Security
min :: Security -> Security -> Security
Ord, Int -> Security -> ShowS
[Security] -> ShowS
Security -> String
(Int -> Security -> ShowS)
-> (Security -> String) -> ([Security] -> ShowS) -> Show Security
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Security -> ShowS
showsPrec :: Int -> Security -> ShowS
$cshow :: Security -> String
show :: Security -> String
$cshowList :: [Security] -> ShowS
showList :: [Security] -> ShowS
Show)

data Secured a = Secured
  { forall a. Secured a -> Security
security :: Security,
    forall a. Secured a -> a
secured :: a
  }
  deriving (Secured a -> Secured a -> Bool
(Secured a -> Secured a -> Bool)
-> (Secured a -> Secured a -> Bool) -> Eq (Secured a)
forall a. Eq a => Secured a -> Secured a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => Secured a -> Secured a -> Bool
== :: Secured a -> Secured a -> Bool
$c/= :: forall a. Eq a => Secured a -> Secured a -> Bool
/= :: Secured a -> Secured a -> Bool
Eq, Eq (Secured a)
Eq (Secured a) =>
(Secured a -> Secured a -> Ordering)
-> (Secured a -> Secured a -> Bool)
-> (Secured a -> Secured a -> Bool)
-> (Secured a -> Secured a -> Bool)
-> (Secured a -> Secured a -> Bool)
-> (Secured a -> Secured a -> Secured a)
-> (Secured a -> Secured a -> Secured a)
-> Ord (Secured a)
Secured a -> Secured a -> Bool
Secured a -> Secured a -> Ordering
Secured a -> Secured a -> Secured a
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
forall a. Ord a => Eq (Secured a)
forall a. Ord a => Secured a -> Secured a -> Bool
forall a. Ord a => Secured a -> Secured a -> Ordering
forall a. Ord a => Secured a -> Secured a -> Secured a
$ccompare :: forall a. Ord a => Secured a -> Secured a -> Ordering
compare :: Secured a -> Secured a -> Ordering
$c< :: forall a. Ord a => Secured a -> Secured a -> Bool
< :: Secured a -> Secured a -> Bool
$c<= :: forall a. Ord a => Secured a -> Secured a -> Bool
<= :: Secured a -> Secured a -> Bool
$c> :: forall a. Ord a => Secured a -> Secured a -> Bool
> :: Secured a -> Secured a -> Bool
$c>= :: forall a. Ord a => Secured a -> Secured a -> Bool
>= :: Secured a -> Secured a -> Bool
$cmax :: forall a. Ord a => Secured a -> Secured a -> Secured a
max :: Secured a -> Secured a -> Secured a
$cmin :: forall a. Ord a => Secured a -> Secured a -> Secured a
min :: Secured a -> Secured a -> Secured a
Ord, Int -> Secured a -> ShowS
[Secured a] -> ShowS
Secured a -> String
(Int -> Secured a -> ShowS)
-> (Secured a -> String)
-> ([Secured a] -> ShowS)
-> Show (Secured a)
forall a. Show a => Int -> Secured a -> ShowS
forall a. Show a => [Secured a] -> ShowS
forall a. Show a => Secured a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> Secured a -> ShowS
showsPrec :: Int -> Secured a -> ShowS
$cshow :: forall a. Show a => Secured a -> String
show :: Secured a -> String
$cshowList :: forall a. Show a => [Secured a] -> ShowS
showList :: [Secured a] -> ShowS
Show, (forall a b. (a -> b) -> Secured a -> Secured b)
-> (forall a b. a -> Secured b -> Secured a) -> Functor Secured
forall a b. a -> Secured b -> Secured a
forall a b. (a -> b) -> Secured a -> Secured b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> Secured a -> Secured b
fmap :: forall a b. (a -> b) -> Secured a -> Secured b
$c<$ :: forall a b. a -> Secured b -> Secured a
<$ :: forall a b. a -> Secured b -> Secured a
Functor)

data Expiry = ExpiryTime UTCTime | ExpiryAge DiffTime
  deriving (Expiry -> Expiry -> Bool
(Expiry -> Expiry -> Bool)
-> (Expiry -> Expiry -> Bool) -> Eq Expiry
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Expiry -> Expiry -> Bool
== :: Expiry -> Expiry -> Bool
$c/= :: Expiry -> Expiry -> Bool
/= :: Expiry -> Expiry -> Bool
Eq, Eq Expiry
Eq Expiry =>
(Expiry -> Expiry -> Ordering)
-> (Expiry -> Expiry -> Bool)
-> (Expiry -> Expiry -> Bool)
-> (Expiry -> Expiry -> Bool)
-> (Expiry -> Expiry -> Bool)
-> (Expiry -> Expiry -> Expiry)
-> (Expiry -> Expiry -> Expiry)
-> Ord Expiry
Expiry -> Expiry -> Bool
Expiry -> Expiry -> Ordering
Expiry -> Expiry -> Expiry
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 :: Expiry -> Expiry -> Ordering
compare :: Expiry -> Expiry -> Ordering
$c< :: Expiry -> Expiry -> Bool
< :: Expiry -> Expiry -> Bool
$c<= :: Expiry -> Expiry -> Bool
<= :: Expiry -> Expiry -> Bool
$c> :: Expiry -> Expiry -> Bool
> :: Expiry -> Expiry -> Bool
$c>= :: Expiry -> Expiry -> Bool
>= :: Expiry -> Expiry -> Bool
$cmax :: Expiry -> Expiry -> Expiry
max :: Expiry -> Expiry -> Expiry
$cmin :: Expiry -> Expiry -> Expiry
min :: Expiry -> Expiry -> Expiry
Ord, Int -> Expiry -> ShowS
[Expiry] -> ShowS
Expiry -> String
(Int -> Expiry -> ShowS)
-> (Expiry -> String) -> ([Expiry] -> ShowS) -> Show Expiry
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Expiry -> ShowS
showsPrec :: Int -> Expiry -> ShowS
$cshow :: Expiry -> String
show :: Expiry -> String
$cshowList :: [Expiry] -> ShowS
showList :: [Expiry] -> ShowS
Show)

data Expiring a = Expiring {forall a. Expiring a -> Expiry
expiry :: Expiry, forall a. Expiring a -> a
expiring :: a}
  deriving (Expiring a -> Expiring a -> Bool
(Expiring a -> Expiring a -> Bool)
-> (Expiring a -> Expiring a -> Bool) -> Eq (Expiring a)
forall a. Eq a => Expiring a -> Expiring a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => Expiring a -> Expiring a -> Bool
== :: Expiring a -> Expiring a -> Bool
$c/= :: forall a. Eq a => Expiring a -> Expiring a -> Bool
/= :: Expiring a -> Expiring a -> Bool
Eq, Eq (Expiring a)
Eq (Expiring a) =>
(Expiring a -> Expiring a -> Ordering)
-> (Expiring a -> Expiring a -> Bool)
-> (Expiring a -> Expiring a -> Bool)
-> (Expiring a -> Expiring a -> Bool)
-> (Expiring a -> Expiring a -> Bool)
-> (Expiring a -> Expiring a -> Expiring a)
-> (Expiring a -> Expiring a -> Expiring a)
-> Ord (Expiring a)
Expiring a -> Expiring a -> Bool
Expiring a -> Expiring a -> Ordering
Expiring a -> Expiring a -> Expiring a
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
forall a. Ord a => Eq (Expiring a)
forall a. Ord a => Expiring a -> Expiring a -> Bool
forall a. Ord a => Expiring a -> Expiring a -> Ordering
forall a. Ord a => Expiring a -> Expiring a -> Expiring a
$ccompare :: forall a. Ord a => Expiring a -> Expiring a -> Ordering
compare :: Expiring a -> Expiring a -> Ordering
$c< :: forall a. Ord a => Expiring a -> Expiring a -> Bool
< :: Expiring a -> Expiring a -> Bool
$c<= :: forall a. Ord a => Expiring a -> Expiring a -> Bool
<= :: Expiring a -> Expiring a -> Bool
$c> :: forall a. Ord a => Expiring a -> Expiring a -> Bool
> :: Expiring a -> Expiring a -> Bool
$c>= :: forall a. Ord a => Expiring a -> Expiring a -> Bool
>= :: Expiring a -> Expiring a -> Bool
$cmax :: forall a. Ord a => Expiring a -> Expiring a -> Expiring a
max :: Expiring a -> Expiring a -> Expiring a
$cmin :: forall a. Ord a => Expiring a -> Expiring a -> Expiring a
min :: Expiring a -> Expiring a -> Expiring a
Ord, Int -> Expiring a -> ShowS
[Expiring a] -> ShowS
Expiring a -> String
(Int -> Expiring a -> ShowS)
-> (Expiring a -> String)
-> ([Expiring a] -> ShowS)
-> Show (Expiring a)
forall a. Show a => Int -> Expiring a -> ShowS
forall a. Show a => [Expiring a] -> ShowS
forall a. Show a => Expiring a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> Expiring a -> ShowS
showsPrec :: Int -> Expiring a -> ShowS
$cshow :: forall a. Show a => Expiring a -> String
show :: Expiring a -> String
$cshowList :: forall a. Show a => [Expiring a] -> ShowS
showList :: [Expiring a] -> ShowS
Show, (forall a b. (a -> b) -> Expiring a -> Expiring b)
-> (forall a b. a -> Expiring b -> Expiring a) -> Functor Expiring
forall a b. a -> Expiring b -> Expiring a
forall a b. (a -> b) -> Expiring a -> Expiring b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> Expiring a -> Expiring b
fmap :: forall a b. (a -> b) -> Expiring a -> Expiring b
$c<$ :: forall a b. a -> Expiring b -> Expiring a
<$ :: forall a b. a -> Expiring b -> Expiring a
Functor)

-- | The host to which the cookie will be sent
data Domain = Domain BS.ByteString | CurrentHostExcludingSubdomains
  deriving (Domain -> Domain -> Bool
(Domain -> Domain -> Bool)
-> (Domain -> Domain -> Bool) -> Eq Domain
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Domain -> Domain -> Bool
== :: Domain -> Domain -> Bool
$c/= :: Domain -> Domain -> Bool
/= :: Domain -> Domain -> Bool
Eq, Eq Domain
Eq Domain =>
(Domain -> Domain -> Ordering)
-> (Domain -> Domain -> Bool)
-> (Domain -> Domain -> Bool)
-> (Domain -> Domain -> Bool)
-> (Domain -> Domain -> Bool)
-> (Domain -> Domain -> Domain)
-> (Domain -> Domain -> Domain)
-> Ord Domain
Domain -> Domain -> Bool
Domain -> Domain -> Ordering
Domain -> Domain -> Domain
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 :: Domain -> Domain -> Ordering
compare :: Domain -> Domain -> Ordering
$c< :: Domain -> Domain -> Bool
< :: Domain -> Domain -> Bool
$c<= :: Domain -> Domain -> Bool
<= :: Domain -> Domain -> Bool
$c> :: Domain -> Domain -> Bool
> :: Domain -> Domain -> Bool
$c>= :: Domain -> Domain -> Bool
>= :: Domain -> Domain -> Bool
$cmax :: Domain -> Domain -> Domain
max :: Domain -> Domain -> Domain
$cmin :: Domain -> Domain -> Domain
min :: Domain -> Domain -> Domain
Ord, Int -> Domain -> ShowS
[Domain] -> ShowS
Domain -> String
(Int -> Domain -> ShowS)
-> (Domain -> String) -> ([Domain] -> ShowS) -> Show Domain
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Domain -> ShowS
showsPrec :: Int -> Domain -> ShowS
$cshow :: Domain -> String
show :: Domain -> String
$cshowList :: [Domain] -> ShowS
showList :: [Domain] -> ShowS
Show)

data Path = Path BS.ByteString | CurrentPath
  deriving (Path -> Path -> Bool
(Path -> Path -> Bool) -> (Path -> Path -> Bool) -> Eq Path
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Path -> Path -> Bool
== :: Path -> Path -> Bool
$c/= :: Path -> Path -> Bool
/= :: Path -> Path -> Bool
Eq, Eq Path
Eq Path =>
(Path -> Path -> Ordering)
-> (Path -> Path -> Bool)
-> (Path -> Path -> Bool)
-> (Path -> Path -> Bool)
-> (Path -> Path -> Bool)
-> (Path -> Path -> Path)
-> (Path -> Path -> Path)
-> Ord Path
Path -> Path -> Bool
Path -> Path -> Ordering
Path -> Path -> Path
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 :: Path -> Path -> Ordering
compare :: Path -> Path -> Ordering
$c< :: Path -> Path -> Bool
< :: Path -> Path -> Bool
$c<= :: Path -> Path -> Bool
<= :: Path -> Path -> Bool
$c> :: Path -> Path -> Bool
> :: Path -> Path -> Bool
$c>= :: Path -> Path -> Bool
>= :: Path -> Path -> Bool
$cmax :: Path -> Path -> Path
max :: Path -> Path -> Path
$cmin :: Path -> Path -> Path
min :: Path -> Path -> Path
Ord, Int -> Path -> ShowS
[Path] -> ShowS
Path -> String
(Int -> Path -> ShowS)
-> (Path -> String) -> ([Path] -> ShowS) -> Show Path
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Path -> ShowS
showsPrec :: Int -> Path -> ShowS
$cshow :: Path -> String
show :: Path -> String
$cshowList :: [Path] -> ShowS
showList :: [Path] -> ShowS
Show)

data Scope = Scope {Scope -> Domain
domain :: Domain, Scope -> Path
path :: Path}
  deriving (Scope -> Scope -> Bool
(Scope -> Scope -> Bool) -> (Scope -> Scope -> Bool) -> Eq Scope
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Scope -> Scope -> Bool
== :: Scope -> Scope -> Bool
$c/= :: Scope -> Scope -> Bool
/= :: Scope -> Scope -> Bool
Eq, Eq Scope
Eq Scope =>
(Scope -> Scope -> Ordering)
-> (Scope -> Scope -> Bool)
-> (Scope -> Scope -> Bool)
-> (Scope -> Scope -> Bool)
-> (Scope -> Scope -> Bool)
-> (Scope -> Scope -> Scope)
-> (Scope -> Scope -> Scope)
-> Ord Scope
Scope -> Scope -> Bool
Scope -> Scope -> Ordering
Scope -> Scope -> Scope
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 :: Scope -> Scope -> Ordering
compare :: Scope -> Scope -> Ordering
$c< :: Scope -> Scope -> Bool
< :: Scope -> Scope -> Bool
$c<= :: Scope -> Scope -> Bool
<= :: Scope -> Scope -> Bool
$c> :: Scope -> Scope -> Bool
> :: Scope -> Scope -> Bool
$c>= :: Scope -> Scope -> Bool
>= :: Scope -> Scope -> Bool
$cmax :: Scope -> Scope -> Scope
max :: Scope -> Scope -> Scope
$cmin :: Scope -> Scope -> Scope
min :: Scope -> Scope -> Scope
Ord, Int -> Scope -> ShowS
[Scope] -> ShowS
Scope -> String
(Int -> Scope -> ShowS)
-> (Scope -> String) -> ([Scope] -> ShowS) -> Show Scope
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Scope -> ShowS
showsPrec :: Int -> Scope -> ShowS
$cshow :: Scope -> String
show :: Scope -> String
$cshowList :: [Scope] -> ShowS
showList :: [Scope] -> ShowS
Show)

data Meta = Meta {Meta -> Scope
metaScope :: Scope, Meta -> Security
metaSecurity :: Security}
  deriving (Meta -> Meta -> Bool
(Meta -> Meta -> Bool) -> (Meta -> Meta -> Bool) -> Eq Meta
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Meta -> Meta -> Bool
== :: Meta -> Meta -> Bool
$c/= :: Meta -> Meta -> Bool
/= :: Meta -> Meta -> Bool
Eq, Eq Meta
Eq Meta =>
(Meta -> Meta -> Ordering)
-> (Meta -> Meta -> Bool)
-> (Meta -> Meta -> Bool)
-> (Meta -> Meta -> Bool)
-> (Meta -> Meta -> Bool)
-> (Meta -> Meta -> Meta)
-> (Meta -> Meta -> Meta)
-> Ord Meta
Meta -> Meta -> Bool
Meta -> Meta -> Ordering
Meta -> Meta -> Meta
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 :: Meta -> Meta -> Ordering
compare :: Meta -> Meta -> Ordering
$c< :: Meta -> Meta -> Bool
< :: Meta -> Meta -> Bool
$c<= :: Meta -> Meta -> Bool
<= :: Meta -> Meta -> Bool
$c> :: Meta -> Meta -> Bool
> :: Meta -> Meta -> Bool
$c>= :: Meta -> Meta -> Bool
>= :: Meta -> Meta -> Bool
$cmax :: Meta -> Meta -> Meta
max :: Meta -> Meta -> Meta
$cmin :: Meta -> Meta -> Meta
min :: Meta -> Meta -> Meta
Ord, Int -> Meta -> ShowS
[Meta] -> ShowS
Meta -> String
(Int -> Meta -> ShowS)
-> (Meta -> String) -> ([Meta] -> ShowS) -> Show Meta
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Meta -> ShowS
showsPrec :: Int -> Meta -> ShowS
$cshow :: Meta -> String
show :: Meta -> String
$cshowList :: [Meta] -> ShowS
showList :: [Meta] -> ShowS
Show)

data Action a = Delete | Put a
  deriving (Action a -> Action a -> Bool
(Action a -> Action a -> Bool)
-> (Action a -> Action a -> Bool) -> Eq (Action a)
forall a. Eq a => Action a -> Action a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => Action a -> Action a -> Bool
== :: Action a -> Action a -> Bool
$c/= :: forall a. Eq a => Action a -> Action a -> Bool
/= :: Action a -> Action a -> Bool
Eq, Eq (Action a)
Eq (Action a) =>
(Action a -> Action a -> Ordering)
-> (Action a -> Action a -> Bool)
-> (Action a -> Action a -> Bool)
-> (Action a -> Action a -> Bool)
-> (Action a -> Action a -> Bool)
-> (Action a -> Action a -> Action a)
-> (Action a -> Action a -> Action a)
-> Ord (Action a)
Action a -> Action a -> Bool
Action a -> Action a -> Ordering
Action a -> Action a -> Action a
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
forall a. Ord a => Eq (Action a)
forall a. Ord a => Action a -> Action a -> Bool
forall a. Ord a => Action a -> Action a -> Ordering
forall a. Ord a => Action a -> Action a -> Action a
$ccompare :: forall a. Ord a => Action a -> Action a -> Ordering
compare :: Action a -> Action a -> Ordering
$c< :: forall a. Ord a => Action a -> Action a -> Bool
< :: Action a -> Action a -> Bool
$c<= :: forall a. Ord a => Action a -> Action a -> Bool
<= :: Action a -> Action a -> Bool
$c> :: forall a. Ord a => Action a -> Action a -> Bool
> :: Action a -> Action a -> Bool
$c>= :: forall a. Ord a => Action a -> Action a -> Bool
>= :: Action a -> Action a -> Bool
$cmax :: forall a. Ord a => Action a -> Action a -> Action a
max :: Action a -> Action a -> Action a
$cmin :: forall a. Ord a => Action a -> Action a -> Action a
min :: Action a -> Action a -> Action a
Ord, Int -> Action a -> ShowS
[Action a] -> ShowS
Action a -> String
(Int -> Action a -> ShowS)
-> (Action a -> String) -> ([Action a] -> ShowS) -> Show (Action a)
forall a. Show a => Int -> Action a -> ShowS
forall a. Show a => [Action a] -> ShowS
forall a. Show a => Action a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> Action a -> ShowS
showsPrec :: Int -> Action a -> ShowS
$cshow :: forall a. Show a => Action a -> String
show :: Action a -> String
$cshowList :: forall a. Show a => [Action a] -> ShowS
showList :: [Action a] -> ShowS
Show, (forall a b. (a -> b) -> Action a -> Action b)
-> (forall a b. a -> Action b -> Action a) -> Functor Action
forall a b. a -> Action b -> Action a
forall a b. (a -> b) -> Action a -> Action b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> Action a -> Action b
fmap :: forall a b. (a -> b) -> Action a -> Action b
$c<$ :: forall a b. a -> Action b -> Action a
<$ :: forall a b. a -> Action b -> Action a
Functor)