{-# LANGUAGE OverloadedStrings #-}
module Codec.MIME.Type where
import qualified Data.Text as T
import Data.Monoid ((<>))
data MIMEParam = MIMEParam { MIMEParam -> Text
paramName :: T.Text
, MIMEParam -> Text
paramValue :: T.Text }
deriving (Int -> MIMEParam -> ShowS
[MIMEParam] -> ShowS
MIMEParam -> String
(Int -> MIMEParam -> ShowS)
-> (MIMEParam -> String)
-> ([MIMEParam] -> ShowS)
-> Show MIMEParam
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MIMEParam] -> ShowS
$cshowList :: [MIMEParam] -> ShowS
show :: MIMEParam -> String
$cshow :: MIMEParam -> String
showsPrec :: Int -> MIMEParam -> ShowS
$cshowsPrec :: Int -> MIMEParam -> ShowS
Show, Eq MIMEParam
Eq MIMEParam =>
(MIMEParam -> MIMEParam -> Ordering)
-> (MIMEParam -> MIMEParam -> Bool)
-> (MIMEParam -> MIMEParam -> Bool)
-> (MIMEParam -> MIMEParam -> Bool)
-> (MIMEParam -> MIMEParam -> Bool)
-> (MIMEParam -> MIMEParam -> MIMEParam)
-> (MIMEParam -> MIMEParam -> MIMEParam)
-> Ord MIMEParam
MIMEParam -> MIMEParam -> Bool
MIMEParam -> MIMEParam -> Ordering
MIMEParam -> MIMEParam -> MIMEParam
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
min :: MIMEParam -> MIMEParam -> MIMEParam
$cmin :: MIMEParam -> MIMEParam -> MIMEParam
max :: MIMEParam -> MIMEParam -> MIMEParam
$cmax :: MIMEParam -> MIMEParam -> MIMEParam
>= :: MIMEParam -> MIMEParam -> Bool
$c>= :: MIMEParam -> MIMEParam -> Bool
> :: MIMEParam -> MIMEParam -> Bool
$c> :: MIMEParam -> MIMEParam -> Bool
<= :: MIMEParam -> MIMEParam -> Bool
$c<= :: MIMEParam -> MIMEParam -> Bool
< :: MIMEParam -> MIMEParam -> Bool
$c< :: MIMEParam -> MIMEParam -> Bool
compare :: MIMEParam -> MIMEParam -> Ordering
$ccompare :: MIMEParam -> MIMEParam -> Ordering
$cp1Ord :: Eq MIMEParam
Ord, MIMEParam -> MIMEParam -> Bool
(MIMEParam -> MIMEParam -> Bool)
-> (MIMEParam -> MIMEParam -> Bool) -> Eq MIMEParam
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MIMEParam -> MIMEParam -> Bool
$c/= :: MIMEParam -> MIMEParam -> Bool
== :: MIMEParam -> MIMEParam -> Bool
$c== :: MIMEParam -> MIMEParam -> Bool
Eq)
data Type = Type
{ Type -> MIMEType
mimeType :: MIMEType
, Type -> [MIMEParam]
mimeParams :: [MIMEParam]
} deriving ( Int -> Type -> ShowS
[Type] -> ShowS
Type -> String
(Int -> Type -> ShowS)
-> (Type -> String) -> ([Type] -> ShowS) -> Show Type
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Type] -> ShowS
$cshowList :: [Type] -> ShowS
show :: Type -> String
$cshow :: Type -> String
showsPrec :: Int -> Type -> ShowS
$cshowsPrec :: Int -> Type -> ShowS
Show, Eq Type
Eq Type =>
(Type -> Type -> Ordering)
-> (Type -> Type -> Bool)
-> (Type -> Type -> Bool)
-> (Type -> Type -> Bool)
-> (Type -> Type -> Bool)
-> (Type -> Type -> Type)
-> (Type -> Type -> Type)
-> Ord Type
Type -> Type -> Bool
Type -> Type -> Ordering
Type -> Type -> Type
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
min :: Type -> Type -> Type
$cmin :: Type -> Type -> Type
max :: Type -> Type -> Type
$cmax :: Type -> Type -> Type
>= :: Type -> Type -> Bool
$c>= :: Type -> Type -> Bool
> :: Type -> Type -> Bool
$c> :: Type -> Type -> Bool
<= :: Type -> Type -> Bool
$c<= :: Type -> Type -> Bool
< :: Type -> Type -> Bool
$c< :: Type -> Type -> Bool
compare :: Type -> Type -> Ordering
$ccompare :: Type -> Type -> Ordering
$cp1Ord :: Eq Type
Ord, Type -> Type -> Bool
(Type -> Type -> Bool) -> (Type -> Type -> Bool) -> Eq Type
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Type -> Type -> Bool
$c/= :: Type -> Type -> Bool
== :: Type -> Type -> Bool
$c== :: Type -> Type -> Bool
Eq )
nullType :: Type
nullType :: Type
nullType = Type :: MIMEType -> [MIMEParam] -> Type
Type
{ mimeType :: MIMEType
mimeType = Text -> MIMEType
Text "plain"
, mimeParams :: [MIMEParam]
mimeParams = []
}
showType :: Type -> T.Text
showType :: Type -> Text
showType t :: Type
t = MIMEType -> Text
showMIMEType (Type -> MIMEType
mimeType Type
t) Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> [MIMEParam] -> Text
showMIMEParams (Type -> [MIMEParam]
mimeParams Type
t)
showMIMEParams :: [MIMEParam] -> T.Text
showMIMEParams :: [MIMEParam] -> Text
showMIMEParams ps :: [MIMEParam]
ps = [Text] -> Text
T.concat ([Text] -> Text) -> [Text] -> Text
forall a b. (a -> b) -> a -> b
$ (MIMEParam -> Text) -> [MIMEParam] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map MIMEParam -> Text
showP [MIMEParam]
ps
where
showP :: MIMEParam -> Text
showP (MIMEParam a :: Text
a b :: Text
b) = "; " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
a Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "=\"" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
b Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "\""
data MIMEType
= Application SubType
| Audio SubType
| Image SubType
| Message SubType
| Model SubType
| Multipart Multipart
| Text TextType
| Video SubType
| Other {MIMEType -> Text
otherType :: T.Text, MIMEType -> Text
otherSubType :: SubType}
deriving ( Int -> MIMEType -> ShowS
[MIMEType] -> ShowS
MIMEType -> String
(Int -> MIMEType -> ShowS)
-> (MIMEType -> String) -> ([MIMEType] -> ShowS) -> Show MIMEType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MIMEType] -> ShowS
$cshowList :: [MIMEType] -> ShowS
show :: MIMEType -> String
$cshow :: MIMEType -> String
showsPrec :: Int -> MIMEType -> ShowS
$cshowsPrec :: Int -> MIMEType -> ShowS
Show, Eq MIMEType
Eq MIMEType =>
(MIMEType -> MIMEType -> Ordering)
-> (MIMEType -> MIMEType -> Bool)
-> (MIMEType -> MIMEType -> Bool)
-> (MIMEType -> MIMEType -> Bool)
-> (MIMEType -> MIMEType -> Bool)
-> (MIMEType -> MIMEType -> MIMEType)
-> (MIMEType -> MIMEType -> MIMEType)
-> Ord MIMEType
MIMEType -> MIMEType -> Bool
MIMEType -> MIMEType -> Ordering
MIMEType -> MIMEType -> MIMEType
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
min :: MIMEType -> MIMEType -> MIMEType
$cmin :: MIMEType -> MIMEType -> MIMEType
max :: MIMEType -> MIMEType -> MIMEType
$cmax :: MIMEType -> MIMEType -> MIMEType
>= :: MIMEType -> MIMEType -> Bool
$c>= :: MIMEType -> MIMEType -> Bool
> :: MIMEType -> MIMEType -> Bool
$c> :: MIMEType -> MIMEType -> Bool
<= :: MIMEType -> MIMEType -> Bool
$c<= :: MIMEType -> MIMEType -> Bool
< :: MIMEType -> MIMEType -> Bool
$c< :: MIMEType -> MIMEType -> Bool
compare :: MIMEType -> MIMEType -> Ordering
$ccompare :: MIMEType -> MIMEType -> Ordering
$cp1Ord :: Eq MIMEType
Ord, MIMEType -> MIMEType -> Bool
(MIMEType -> MIMEType -> Bool)
-> (MIMEType -> MIMEType -> Bool) -> Eq MIMEType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MIMEType -> MIMEType -> Bool
$c/= :: MIMEType -> MIMEType -> Bool
== :: MIMEType -> MIMEType -> Bool
$c== :: MIMEType -> MIMEType -> Bool
Eq )
showMIMEType :: MIMEType -> T.Text
showMIMEType :: MIMEType -> Text
showMIMEType t :: MIMEType
t =
case MIMEType
t of
Application s :: Text
s -> "application/"Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<>Text
s
Audio s :: Text
s -> "audio/"Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<>Text
s
Image s :: Text
s -> "image/"Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<>Text
s
Message s :: Text
s -> "message/"Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<>Text
s
Model s :: Text
s -> "model/"Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<>Text
s
Multipart s :: Multipart
s -> "multipart/"Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<>Multipart -> Text
showMultipart Multipart
s
Text s :: Text
s -> "text/"Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<>Text
s
Video s :: Text
s -> "video/"Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<>Text
s
Other a :: Text
a b :: Text
b -> Text
a Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "/" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
b
data MIMEPair
= MIMEPair T.Text SubType
deriving ( MIMEPair -> MIMEPair -> Bool
(MIMEPair -> MIMEPair -> Bool)
-> (MIMEPair -> MIMEPair -> Bool) -> Eq MIMEPair
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MIMEPair -> MIMEPair -> Bool
$c/= :: MIMEPair -> MIMEPair -> Bool
== :: MIMEPair -> MIMEPair -> Bool
$c== :: MIMEPair -> MIMEPair -> Bool
Eq )
showMIMEPair :: MIMEPair -> T.Text
showMIMEPair :: MIMEPair -> Text
showMIMEPair (MIMEPair a :: Text
a b :: Text
b) = Text
a Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "/" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
b
type SubType = T.Text
type TextType = SubType
subTypeString :: Type -> T.Text
subTypeString :: Type -> Text
subTypeString t :: Type
t = Int -> Text -> Text
T.drop 1 (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$ (Text, Text) -> Text
forall a b. (a, b) -> b
snd ((Text, Text) -> Text) -> (Text, Text) -> Text
forall a b. (a -> b) -> a -> b
$ (Char -> Bool) -> Text -> (Text, Text)
T.break (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
=='/') (MIMEType -> Text
showMIMEType (Type -> MIMEType
mimeType Type
t))
majTypeString :: Type -> T.Text
majTypeString :: Type -> Text
majTypeString t :: Type
t = (Text, Text) -> Text
forall a b. (a, b) -> a
fst ((Text, Text) -> Text) -> (Text, Text) -> Text
forall a b. (a -> b) -> a -> b
$ (Char -> Bool) -> Text -> (Text, Text)
T.break (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
=='/') (MIMEType -> Text
showMIMEType (Type -> MIMEType
mimeType Type
t))
data Multipart
= Alternative
| Byteranges
| Digest
| Encrypted
| FormData
| Mixed
| Parallel
| Related
| Signed
| Extension T.Text
| OtherMulti T.Text
deriving ( Int -> Multipart -> ShowS
[Multipart] -> ShowS
Multipart -> String
(Int -> Multipart -> ShowS)
-> (Multipart -> String)
-> ([Multipart] -> ShowS)
-> Show Multipart
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Multipart] -> ShowS
$cshowList :: [Multipart] -> ShowS
show :: Multipart -> String
$cshow :: Multipart -> String
showsPrec :: Int -> Multipart -> ShowS
$cshowsPrec :: Int -> Multipart -> ShowS
Show, Eq Multipart
Eq Multipart =>
(Multipart -> Multipart -> Ordering)
-> (Multipart -> Multipart -> Bool)
-> (Multipart -> Multipart -> Bool)
-> (Multipart -> Multipart -> Bool)
-> (Multipart -> Multipart -> Bool)
-> (Multipart -> Multipart -> Multipart)
-> (Multipart -> Multipart -> Multipart)
-> Ord Multipart
Multipart -> Multipart -> Bool
Multipart -> Multipart -> Ordering
Multipart -> Multipart -> Multipart
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
min :: Multipart -> Multipart -> Multipart
$cmin :: Multipart -> Multipart -> Multipart
max :: Multipart -> Multipart -> Multipart
$cmax :: Multipart -> Multipart -> Multipart
>= :: Multipart -> Multipart -> Bool
$c>= :: Multipart -> Multipart -> Bool
> :: Multipart -> Multipart -> Bool
$c> :: Multipart -> Multipart -> Bool
<= :: Multipart -> Multipart -> Bool
$c<= :: Multipart -> Multipart -> Bool
< :: Multipart -> Multipart -> Bool
$c< :: Multipart -> Multipart -> Bool
compare :: Multipart -> Multipart -> Ordering
$ccompare :: Multipart -> Multipart -> Ordering
$cp1Ord :: Eq Multipart
Ord, Multipart -> Multipart -> Bool
(Multipart -> Multipart -> Bool)
-> (Multipart -> Multipart -> Bool) -> Eq Multipart
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Multipart -> Multipart -> Bool
$c/= :: Multipart -> Multipart -> Bool
== :: Multipart -> Multipart -> Bool
$c== :: Multipart -> Multipart -> Bool
Eq )
isXmlBased :: Type -> Bool
isXmlBased :: Type -> Bool
isXmlBased t :: Type
t =
case Type -> MIMEType
mimeType Type
t of
Multipart{} -> Bool
False
_ -> "+xml" Text -> Text -> Bool
`T.isSuffixOf` Type -> Text
subTypeString Type
t
isXmlType :: Type -> Bool
isXmlType :: Type -> Bool
isXmlType t :: Type
t = Type -> Bool
isXmlBased Type
t Bool -> Bool -> Bool
||
case Type -> MIMEType
mimeType Type
t of
Application s :: Text
s -> Text
s Text -> [Text] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [Text]
xml_media_types
Text s :: Text
s -> Text
s Text -> [Text] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [Text]
xml_media_types
_ -> Bool
False
where
xml_media_types :: [T.Text]
xml_media_types :: [Text]
xml_media_types =
[ "xml"
, "xml-external-parsed-entity"
]
showMultipart :: Multipart -> T.Text
showMultipart :: Multipart -> Text
showMultipart m :: Multipart
m =
case Multipart
m of
Alternative -> "alternative"
Byteranges -> "byteranges"
Digest -> "digest"
Encrypted -> "encrypted"
FormData -> "form-data"
Mixed -> "mixed"
Parallel -> "parallel"
Related -> "related"
Signed -> "signed"
Extension e :: Text
e -> Text
e
OtherMulti e :: Text
e -> Text
e
type Content = T.Text
data MIMEValue = MIMEValue
{ MIMEValue -> Type
mime_val_type :: Type
, MIMEValue -> Maybe Disposition
mime_val_disp :: Maybe Disposition
, MIMEValue -> MIMEContent
mime_val_content :: MIMEContent
, :: [MIMEParam]
, MIMEValue -> Bool
mime_val_inc_type :: Bool
} deriving ( Int -> MIMEValue -> ShowS
[MIMEValue] -> ShowS
MIMEValue -> String
(Int -> MIMEValue -> ShowS)
-> (MIMEValue -> String)
-> ([MIMEValue] -> ShowS)
-> Show MIMEValue
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MIMEValue] -> ShowS
$cshowList :: [MIMEValue] -> ShowS
show :: MIMEValue -> String
$cshow :: MIMEValue -> String
showsPrec :: Int -> MIMEValue -> ShowS
$cshowsPrec :: Int -> MIMEValue -> ShowS
Show, MIMEValue -> MIMEValue -> Bool
(MIMEValue -> MIMEValue -> Bool)
-> (MIMEValue -> MIMEValue -> Bool) -> Eq MIMEValue
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MIMEValue -> MIMEValue -> Bool
$c/= :: MIMEValue -> MIMEValue -> Bool
== :: MIMEValue -> MIMEValue -> Bool
$c== :: MIMEValue -> MIMEValue -> Bool
Eq )
nullMIMEValue :: MIMEValue
nullMIMEValue :: MIMEValue
nullMIMEValue = MIMEValue :: Type
-> Maybe Disposition
-> MIMEContent
-> [MIMEParam]
-> Bool
-> MIMEValue
MIMEValue
{ mime_val_type :: Type
mime_val_type = Type
nullType
, mime_val_disp :: Maybe Disposition
mime_val_disp = Maybe Disposition
forall a. Maybe a
Nothing
, mime_val_content :: MIMEContent
mime_val_content = [MIMEValue] -> MIMEContent
Multi []
, mime_val_headers :: [MIMEParam]
mime_val_headers = []
, mime_val_inc_type :: Bool
mime_val_inc_type = Bool
True
}
data MIMEContent
= Single Content
| Multi [MIMEValue]
deriving (MIMEContent -> MIMEContent -> Bool
(MIMEContent -> MIMEContent -> Bool)
-> (MIMEContent -> MIMEContent -> Bool) -> Eq MIMEContent
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MIMEContent -> MIMEContent -> Bool
$c/= :: MIMEContent -> MIMEContent -> Bool
== :: MIMEContent -> MIMEContent -> Bool
$c== :: MIMEContent -> MIMEContent -> Bool
Eq,Int -> MIMEContent -> ShowS
[MIMEContent] -> ShowS
MIMEContent -> String
(Int -> MIMEContent -> ShowS)
-> (MIMEContent -> String)
-> ([MIMEContent] -> ShowS)
-> Show MIMEContent
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MIMEContent] -> ShowS
$cshowList :: [MIMEContent] -> ShowS
show :: MIMEContent -> String
$cshow :: MIMEContent -> String
showsPrec :: Int -> MIMEContent -> ShowS
$cshowsPrec :: Int -> MIMEContent -> ShowS
Show)
data Disposition
= Disposition
{ Disposition -> DispType
dispType :: DispType
, Disposition -> [DispParam]
dispParams :: [DispParam]
} deriving ( Int -> Disposition -> ShowS
[Disposition] -> ShowS
Disposition -> String
(Int -> Disposition -> ShowS)
-> (Disposition -> String)
-> ([Disposition] -> ShowS)
-> Show Disposition
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Disposition] -> ShowS
$cshowList :: [Disposition] -> ShowS
show :: Disposition -> String
$cshow :: Disposition -> String
showsPrec :: Int -> Disposition -> ShowS
$cshowsPrec :: Int -> Disposition -> ShowS
Show, Disposition -> Disposition -> Bool
(Disposition -> Disposition -> Bool)
-> (Disposition -> Disposition -> Bool) -> Eq Disposition
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Disposition -> Disposition -> Bool
$c/= :: Disposition -> Disposition -> Bool
== :: Disposition -> Disposition -> Bool
$c== :: Disposition -> Disposition -> Bool
Eq )
data DispType
= DispInline
| DispAttachment
| DispFormData
| DispOther T.Text
deriving ( Int -> DispType -> ShowS
[DispType] -> ShowS
DispType -> String
(Int -> DispType -> ShowS)
-> (DispType -> String) -> ([DispType] -> ShowS) -> Show DispType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DispType] -> ShowS
$cshowList :: [DispType] -> ShowS
show :: DispType -> String
$cshow :: DispType -> String
showsPrec :: Int -> DispType -> ShowS
$cshowsPrec :: Int -> DispType -> ShowS
Show, DispType -> DispType -> Bool
(DispType -> DispType -> Bool)
-> (DispType -> DispType -> Bool) -> Eq DispType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DispType -> DispType -> Bool
$c/= :: DispType -> DispType -> Bool
== :: DispType -> DispType -> Bool
$c== :: DispType -> DispType -> Bool
Eq)
data DispParam
= Name T.Text
| Filename T.Text
| CreationDate T.Text
| ModDate T.Text
| ReadDate T.Text
| Size T.Text
| OtherParam T.Text T.Text
deriving ( Int -> DispParam -> ShowS
[DispParam] -> ShowS
DispParam -> String
(Int -> DispParam -> ShowS)
-> (DispParam -> String)
-> ([DispParam] -> ShowS)
-> Show DispParam
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DispParam] -> ShowS
$cshowList :: [DispParam] -> ShowS
show :: DispParam -> String
$cshow :: DispParam -> String
showsPrec :: Int -> DispParam -> ShowS
$cshowsPrec :: Int -> DispParam -> ShowS
Show, DispParam -> DispParam -> Bool
(DispParam -> DispParam -> Bool)
-> (DispParam -> DispParam -> Bool) -> Eq DispParam
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DispParam -> DispParam -> Bool
$c/= :: DispParam -> DispParam -> Bool
== :: DispParam -> DispParam -> Bool
$c== :: DispParam -> DispParam -> Bool
Eq)