{-# LANGUAGE OverloadedStrings #-}
module Aihc.Parser.Shorthand
( Shorthand (..),
)
where
import Aihc.Parser.Lex (LexToken (..), LexTokenKind (..))
import Aihc.Parser.Syntax
import Aihc.Parser.Types (ParseResult (..))
import Data.Text (Text)
import Prettyprinter
( Doc,
Pretty (..),
braces,
brackets,
comma,
dquotes,
hsep,
parens,
punctuate,
(<+>),
)
class Shorthand a where
shorthand :: a -> Doc ()
instance (Shorthand a) => Shorthand (ParseResult a) where
shorthand :: ParseResult a -> Doc ()
shorthand (ParseOk a
a) = Doc ()
"ParseOk" Doc () -> Doc () -> Doc ()
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc () -> Doc ()
forall ann. Doc ann -> Doc ann
parens (a -> Doc ()
forall a. Shorthand a => a -> Doc ()
shorthand a
a)
shorthand (ParseErr ParseErrorBundle
_) = Doc ()
"ParseErr"
instance Shorthand Module where
shorthand :: Module -> Doc ()
shorthand Module
modu =
Doc ()
"Module" Doc () -> Doc () -> Doc ()
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc () -> Doc ()
forall ann. Doc ann -> Doc ann
braces ([Doc ()] -> Doc ()
forall ann. [Doc ann] -> Doc ann
hsep (Doc () -> [Doc ()] -> [Doc ()]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ()
forall ann. Doc ann
comma [Doc ()]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
Text -> (Text -> Doc ann) -> Maybe Text -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"name" Text -> Doc ann
forall ann. Text -> Doc ann
docText (Module -> Maybe Text
moduleName Module
modu)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text
-> (ExtensionSetting -> Doc ann) -> [ExtensionSetting] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"languagePragmas" ExtensionSetting -> Doc ann
forall ann. ExtensionSetting -> Doc ann
docExtensionSetting (Module -> [ExtensionSetting]
moduleLanguagePragmas Module
modu)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (WarningText -> Doc ann) -> Maybe WarningText -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"warningText" WarningText -> Doc ann
forall ann. WarningText -> Doc ann
docWarningText (Module -> Maybe WarningText
moduleWarningText Module
modu)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text
-> ([ExportSpec] -> Doc ann) -> Maybe [ExportSpec] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"exports" (Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets (Doc ann -> Doc ann)
-> ([ExportSpec] -> Doc ann) -> [ExportSpec] -> Doc ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep ([Doc ann] -> Doc ann)
-> ([ExportSpec] -> [Doc ann]) -> [ExportSpec] -> Doc ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ([Doc ann] -> [Doc ann])
-> ([ExportSpec] -> [Doc ann]) -> [ExportSpec] -> [Doc ann]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ExportSpec -> Doc ann) -> [ExportSpec] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map ExportSpec -> Doc ann
forall ann. ExportSpec -> Doc ann
docExportSpec) (Module -> Maybe [ExportSpec]
moduleExports Module
modu)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (ImportDecl -> Doc ann) -> [ImportDecl] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"imports" ImportDecl -> Doc ann
forall ann. ImportDecl -> Doc ann
docImportDecl (Module -> [ImportDecl]
moduleImports Module
modu)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Decl -> Doc ann) -> [Decl] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"decls" Decl -> Doc ann
forall ann. Decl -> Doc ann
docDecl (Module -> [Decl]
moduleDecls Module
modu)
instance Shorthand Expr where
shorthand :: Expr -> Doc ()
shorthand = Expr -> Doc ()
forall ann. Expr -> Doc ann
docExpr
instance Shorthand Pattern where
shorthand :: Pattern -> Doc ()
shorthand = Pattern -> Doc ()
forall ann. Pattern -> Doc ann
docPattern
instance Shorthand Type where
shorthand :: Type -> Doc ()
shorthand = Type -> Doc ()
forall ann. Type -> Doc ann
docType
instance Shorthand LexToken where
shorthand :: LexToken -> Doc ()
shorthand = LexToken -> Doc ()
forall ann. LexToken -> Doc ann
docToken
instance Shorthand LexTokenKind where
shorthand :: LexTokenKind -> Doc ()
shorthand = LexTokenKind -> Doc ()
forall ann. LexTokenKind -> Doc ann
docTokenKind
docWarningText :: WarningText -> Doc ann
docWarningText :: forall ann. WarningText -> Doc ann
docWarningText WarningText
wt =
case WarningText
wt of
DeprText SourceSpan
_ Text
msg -> Doc ann
"DeprText" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
msg
WarnText SourceSpan
_ Text
msg -> Doc ann
"WarnText" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
msg
docExtensionSetting :: ExtensionSetting -> Doc ann
docExtensionSetting :: forall ann. ExtensionSetting -> Doc ann
docExtensionSetting ExtensionSetting
setting =
case ExtensionSetting
setting of
EnableExtension Extension
ext -> Doc ann
"EnableExtension" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Text -> Doc ann
pretty (Extension -> Text
extensionName Extension
ext)
DisableExtension Extension
ext -> Doc ann
"DisableExtension" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Text -> Doc ann
pretty (Extension -> Text
extensionName Extension
ext)
docExportSpec :: ExportSpec -> Doc ann
docExportSpec :: forall ann. ExportSpec -> Doc ann
docExportSpec ExportSpec
spec =
case ExportSpec
spec of
ExportModule SourceSpan
_ Text
name -> Doc ann
"ExportModule" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
ExportVar SourceSpan
_ Maybe Text
mNamespace Text
name ->
Doc ann
"ExportVar" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma (Text -> (Text -> Doc ann) -> Maybe Text -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"namespace" Text -> Doc ann
forall ann. Text -> Doc ann
docText Maybe Text
mNamespace [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name)])))
ExportAbs SourceSpan
_ Maybe Text
mNamespace Text
name ->
Doc ann
"ExportAbs" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma (Text -> (Text -> Doc ann) -> Maybe Text -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"namespace" Text -> Doc ann
forall ann. Text -> Doc ann
docText Maybe Text
mNamespace [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name)])))
ExportAll SourceSpan
_ Maybe Text
mNamespace Text
name ->
Doc ann
"ExportAll" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma (Text -> (Text -> Doc ann) -> Maybe Text -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"namespace" Text -> Doc ann
forall ann. Text -> Doc ann
docText Maybe Text
mNamespace [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name)])))
ExportWith SourceSpan
_ Maybe Text
mNamespace Text
name [Text]
members ->
Doc ann
"ExportWith" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma (Text -> (Text -> Doc ann) -> Maybe Text -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"namespace" Text -> Doc ann
forall ann. Text -> Doc ann
docText Maybe Text
mNamespace [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name), Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"members" ([Text] -> Doc ann
forall ann. [Text] -> Doc ann
docTextList [Text]
members)])))
docImportDecl :: ImportDecl -> Doc ann
docImportDecl :: forall ann. ImportDecl -> Doc ann
docImportDecl ImportDecl
decl =
Doc ann
"ImportDecl" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Doc ann]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
[Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"module" (Text -> Doc ann
forall ann. Text -> Doc ann
docText (ImportDecl -> Text
importDeclModule ImportDecl
decl))]
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> Bool -> [Doc ann]
forall ann. Text -> Bool -> [Doc ann]
boolField Text
"qualified" (ImportDecl -> Bool
importDeclQualified ImportDecl
decl)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> Bool -> [Doc ann]
forall ann. Text -> Bool -> [Doc ann]
boolField Text
"qualifiedPost" (ImportDecl -> Bool
importDeclQualifiedPost ImportDecl
decl)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (ImportLevel -> Doc ann) -> Maybe ImportLevel -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"level" ImportLevel -> Doc ann
forall ann. ImportLevel -> Doc ann
docImportLevel (ImportDecl -> Maybe ImportLevel
importDeclLevel ImportDecl
decl)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Text -> Doc ann) -> Maybe Text -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"package" Text -> Doc ann
forall ann. Text -> Doc ann
docText (ImportDecl -> Maybe Text
importDeclPackage ImportDecl
decl)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Text -> Doc ann) -> Maybe Text -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"as" Text -> Doc ann
forall ann. Text -> Doc ann
docText (ImportDecl -> Maybe Text
importDeclAs ImportDecl
decl)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (ImportSpec -> Doc ann) -> Maybe ImportSpec -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"spec" ImportSpec -> Doc ann
forall ann. ImportSpec -> Doc ann
docImportSpec (ImportDecl -> Maybe ImportSpec
importDeclSpec ImportDecl
decl)
docImportLevel :: ImportLevel -> Doc ann
docImportLevel :: forall ann. ImportLevel -> Doc ann
docImportLevel ImportLevel
level =
case ImportLevel
level of
ImportLevel
ImportLevelQuote -> Doc ann
"ImportLevelQuote"
ImportLevel
ImportLevelSplice -> Doc ann
"ImportLevelSplice"
docImportSpec :: ImportSpec -> Doc ann
docImportSpec :: forall ann. ImportSpec -> Doc ann
docImportSpec ImportSpec
spec =
Doc ann
"ImportSpec" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Doc ann]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
Text -> Bool -> [Doc ann]
forall ann. Text -> Bool -> [Doc ann]
boolField Text
"hiding" (ImportSpec -> Bool
importSpecHiding ImportSpec
spec)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"items" (Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((ImportItem -> Doc ann) -> [ImportItem] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map ImportItem -> Doc ann
forall ann. ImportItem -> Doc ann
docImportItem (ImportSpec -> [ImportItem]
importSpecItems ImportSpec
spec)))))]
docImportItem :: ImportItem -> Doc ann
docImportItem :: forall ann. ImportItem -> Doc ann
docImportItem ImportItem
item =
case ImportItem
item of
ImportItemVar SourceSpan
_ Maybe Text
mNamespace Text
name ->
Doc ann
"ImportItemVar" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma (Text -> (Text -> Doc ann) -> Maybe Text -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"namespace" Text -> Doc ann
forall ann. Text -> Doc ann
docText Maybe Text
mNamespace [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name)])))
ImportItemAbs SourceSpan
_ Maybe Text
mNamespace Text
name ->
Doc ann
"ImportItemAbs" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma (Text -> (Text -> Doc ann) -> Maybe Text -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"namespace" Text -> Doc ann
forall ann. Text -> Doc ann
docText Maybe Text
mNamespace [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name)])))
ImportItemAll SourceSpan
_ Maybe Text
mNamespace Text
name ->
Doc ann
"ImportItemAll" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma (Text -> (Text -> Doc ann) -> Maybe Text -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"namespace" Text -> Doc ann
forall ann. Text -> Doc ann
docText Maybe Text
mNamespace [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name)])))
ImportItemWith SourceSpan
_ Maybe Text
mNamespace Text
name [Text]
members ->
Doc ann
"ImportItemWith" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma (Text -> (Text -> Doc ann) -> Maybe Text -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"namespace" Text -> Doc ann
forall ann. Text -> Doc ann
docText Maybe Text
mNamespace [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name), Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"members" ([Text] -> Doc ann
forall ann. [Text] -> Doc ann
docTextList [Text]
members)])))
docDecl :: Decl -> Doc ann
docDecl :: forall ann. Decl -> Doc ann
docDecl Decl
decl =
case Decl
decl of
DeclValue SourceSpan
_ ValueDecl
vdecl -> Doc ann
"DeclValue" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (ValueDecl -> Doc ann
forall ann. ValueDecl -> Doc ann
docValueDecl ValueDecl
vdecl)
DeclTypeSig SourceSpan
_ [Text]
names Type
ty -> Doc ann
"DeclTypeSig" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"names" ([Text] -> Doc ann
forall ann. [Text] -> Doc ann
docTextList [Text]
names), Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"type" (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
ty)]))
DeclStandaloneKindSig SourceSpan
_ Text
name Type
kind -> Doc ann
"DeclStandaloneKindSig" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name), Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"kind" (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
kind)]))
DeclFixity SourceSpan
_ FixityAssoc
assoc Maybe Int
mPrec [Text]
ops -> Doc ann
"DeclFixity" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ([Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"assoc" (FixityAssoc -> Doc ann
forall ann. FixityAssoc -> Doc ann
docFixityAssoc FixityAssoc
assoc)] [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Int -> Doc ann) -> Maybe Int -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"prec" Int -> Doc ann
forall ann. Int -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Maybe Int
mPrec [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"ops" ([Text] -> Doc ann
forall ann. [Text] -> Doc ann
docTextList [Text]
ops)])))
DeclTypeSyn SourceSpan
_ TypeSynDecl
syn -> Doc ann
"DeclTypeSyn" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (TypeSynDecl -> Doc ann
forall ann. TypeSynDecl -> Doc ann
docTypeSynDecl TypeSynDecl
syn)
DeclData SourceSpan
_ DataDecl
dd -> Doc ann
"DeclData" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (DataDecl -> Doc ann
forall ann. DataDecl -> Doc ann
docDataDecl DataDecl
dd)
DeclNewtype SourceSpan
_ NewtypeDecl
nd -> Doc ann
"DeclNewtype" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (NewtypeDecl -> Doc ann
forall ann. NewtypeDecl -> Doc ann
docNewtypeDecl NewtypeDecl
nd)
DeclClass SourceSpan
_ ClassDecl
cd -> Doc ann
"DeclClass" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (ClassDecl -> Doc ann
forall ann. ClassDecl -> Doc ann
docClassDecl ClassDecl
cd)
DeclInstance SourceSpan
_ InstanceDecl
inst -> Doc ann
"DeclInstance" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (InstanceDecl -> Doc ann
forall ann. InstanceDecl -> Doc ann
docInstanceDecl InstanceDecl
inst)
DeclStandaloneDeriving SourceSpan
_ StandaloneDerivingDecl
sd -> Doc ann
"DeclStandaloneDeriving" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (StandaloneDerivingDecl -> Doc ann
forall ann. StandaloneDerivingDecl -> Doc ann
docStandaloneDerivingDecl StandaloneDerivingDecl
sd)
DeclDefault SourceSpan
_ [Type]
tys -> Doc ann
"DeclDefault" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Type -> Doc ann) -> [Type] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Type -> Doc ann
forall ann. Type -> Doc ann
docType [Type]
tys)))
DeclForeign SourceSpan
_ ForeignDecl
fd -> Doc ann
"DeclForeign" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (ForeignDecl -> Doc ann
forall ann. ForeignDecl -> Doc ann
docForeignDecl ForeignDecl
fd)
docValueDecl :: ValueDecl -> Doc ann
docValueDecl :: forall ann. ValueDecl -> Doc ann
docValueDecl ValueDecl
vdecl =
case ValueDecl
vdecl of
FunctionBind SourceSpan
_ Text
name [Match]
matches -> Doc ann
"FunctionBind" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Match -> Doc ann) -> [Match] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Match -> Doc ann
forall ann. Match -> Doc ann
docMatch [Match]
matches)))
PatternBind SourceSpan
_ Pattern
pat Rhs
rhs -> Doc ann
"PatternBind" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern Pattern
pat Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Rhs -> Doc ann
forall ann. Rhs -> Doc ann
docRhs Rhs
rhs
docMatch :: Match -> Doc ann
docMatch :: forall ann. Match -> Doc ann
docMatch Match
m =
Doc ann
"Match" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Doc ann]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
Text -> (Pattern -> Doc ann) -> [Pattern] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"pats" Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern (Match -> [Pattern]
matchPats Match
m)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"rhs" (Rhs -> Doc ann
forall ann. Rhs -> Doc ann
docRhs (Match -> Rhs
matchRhs Match
m))]
docRhs :: Rhs -> Doc ann
docRhs :: forall ann. Rhs -> Doc ann
docRhs Rhs
rhs =
case Rhs
rhs of
UnguardedRhs SourceSpan
_ Expr
expr -> Doc ann
"UnguardedRhs" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
expr)
GuardedRhss SourceSpan
_ [GuardedRhs]
grhss -> Doc ann
"GuardedRhss" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((GuardedRhs -> Doc ann) -> [GuardedRhs] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map GuardedRhs -> Doc ann
forall ann. GuardedRhs -> Doc ann
docGuardedRhs [GuardedRhs]
grhss)))
docGuardedRhs :: GuardedRhs -> Doc ann
docGuardedRhs :: forall ann. GuardedRhs -> Doc ann
docGuardedRhs GuardedRhs
grhs =
Doc ann
"GuardedRhs" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"guards" (Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((GuardQualifier -> Doc ann) -> [GuardQualifier] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map GuardQualifier -> Doc ann
forall ann. GuardQualifier -> Doc ann
docGuardQualifier (GuardedRhs -> [GuardQualifier]
guardedRhsGuards GuardedRhs
grhs))))), Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"body" (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr (GuardedRhs -> Expr
guardedRhsBody GuardedRhs
grhs))]))
docGuardQualifier :: GuardQualifier -> Doc ann
docGuardQualifier :: forall ann. GuardQualifier -> Doc ann
docGuardQualifier GuardQualifier
gq =
case GuardQualifier
gq of
GuardExpr SourceSpan
_ Expr
expr -> Doc ann
"GuardExpr" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
expr)
GuardPat SourceSpan
_ Pattern
pat Expr
expr -> Doc ann
"GuardPat" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern Pattern
pat) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
expr)
GuardLet SourceSpan
_ [Decl]
decls -> Doc ann
"GuardLet" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Decl -> Doc ann) -> [Decl] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Decl -> Doc ann
forall ann. Decl -> Doc ann
docDecl [Decl]
decls)))
docTypeSynDecl :: TypeSynDecl -> Doc ann
docTypeSynDecl :: forall ann. TypeSynDecl -> Doc ann
docTypeSynDecl TypeSynDecl
syn =
Doc ann
"TypeSynDecl" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Doc ann]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
[Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText (TypeSynDecl -> Text
typeSynName TypeSynDecl
syn))]
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (TyVarBinder -> Doc ann) -> [TyVarBinder] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"params" TyVarBinder -> Doc ann
forall ann. TyVarBinder -> Doc ann
docTyVarBinder (TypeSynDecl -> [TyVarBinder]
typeSynParams TypeSynDecl
syn)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"body" (Type -> Doc ann
forall ann. Type -> Doc ann
docType (TypeSynDecl -> Type
typeSynBody TypeSynDecl
syn))]
docDataDecl :: DataDecl -> Doc ann
docDataDecl :: forall ann. DataDecl -> Doc ann
docDataDecl DataDecl
dd =
Doc ann
"DataDecl" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Doc ann]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
[Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText (DataDecl -> Text
dataDeclName DataDecl
dd))]
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Constraint -> Doc ann) -> [Constraint] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"context" Constraint -> Doc ann
forall ann. Constraint -> Doc ann
docConstraint (DataDecl -> [Constraint]
dataDeclContext DataDecl
dd)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (TyVarBinder -> Doc ann) -> [TyVarBinder] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"params" TyVarBinder -> Doc ann
forall ann. TyVarBinder -> Doc ann
docTyVarBinder (DataDecl -> [TyVarBinder]
dataDeclParams DataDecl
dd)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (DataConDecl -> Doc ann) -> [DataConDecl] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"constructors" DataConDecl -> Doc ann
forall ann. DataConDecl -> Doc ann
docDataConDecl (DataDecl -> [DataConDecl]
dataDeclConstructors DataDecl
dd)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text
-> (DerivingClause -> Doc ann) -> [DerivingClause] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"deriving" DerivingClause -> Doc ann
forall ann. DerivingClause -> Doc ann
docDerivingClause (DataDecl -> [DerivingClause]
dataDeclDeriving DataDecl
dd)
docNewtypeDecl :: NewtypeDecl -> Doc ann
docNewtypeDecl :: forall ann. NewtypeDecl -> Doc ann
docNewtypeDecl NewtypeDecl
nd =
Doc ann
"NewtypeDecl" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Doc ann]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
[Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText (NewtypeDecl -> Text
newtypeDeclName NewtypeDecl
nd))]
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Constraint -> Doc ann) -> [Constraint] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"context" Constraint -> Doc ann
forall ann. Constraint -> Doc ann
docConstraint (NewtypeDecl -> [Constraint]
newtypeDeclContext NewtypeDecl
nd)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (TyVarBinder -> Doc ann) -> [TyVarBinder] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"params" TyVarBinder -> Doc ann
forall ann. TyVarBinder -> Doc ann
docTyVarBinder (NewtypeDecl -> [TyVarBinder]
newtypeDeclParams NewtypeDecl
nd)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (DataConDecl -> Doc ann) -> Maybe DataConDecl -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"constructor" DataConDecl -> Doc ann
forall ann. DataConDecl -> Doc ann
docDataConDecl (NewtypeDecl -> Maybe DataConDecl
newtypeDeclConstructor NewtypeDecl
nd)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text
-> (DerivingClause -> Doc ann) -> [DerivingClause] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"deriving" DerivingClause -> Doc ann
forall ann. DerivingClause -> Doc ann
docDerivingClause (NewtypeDecl -> [DerivingClause]
newtypeDeclDeriving NewtypeDecl
nd)
docDataConDecl :: DataConDecl -> Doc ann
docDataConDecl :: forall ann. DataConDecl -> Doc ann
docDataConDecl DataConDecl
dcd =
case DataConDecl
dcd of
PrefixCon SourceSpan
_ [Text]
forallVars [Constraint]
constraints Text
name [BangType]
fields' ->
Doc ann
"PrefixCon" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ([Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name)] [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Text -> Doc ann) -> [Text] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"forallVars" Text -> Doc ann
forall ann. Text -> Doc ann
docText [Text]
forallVars [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Constraint -> Doc ann) -> [Constraint] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"constraints" Constraint -> Doc ann
forall ann. Constraint -> Doc ann
docConstraint [Constraint]
constraints [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (BangType -> Doc ann) -> [BangType] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"fields" BangType -> Doc ann
forall ann. BangType -> Doc ann
docBangType [BangType]
fields')))
InfixCon SourceSpan
_ [Text]
forallVars [Constraint]
constraints BangType
lhs Text
op BangType
rhs ->
Doc ann
"InfixCon" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ([Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"op" (Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
op), Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"lhs" (BangType -> Doc ann
forall ann. BangType -> Doc ann
docBangType BangType
lhs), Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"rhs" (BangType -> Doc ann
forall ann. BangType -> Doc ann
docBangType BangType
rhs)] [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Text -> Doc ann) -> [Text] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"forallVars" Text -> Doc ann
forall ann. Text -> Doc ann
docText [Text]
forallVars [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Constraint -> Doc ann) -> [Constraint] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"constraints" Constraint -> Doc ann
forall ann. Constraint -> Doc ann
docConstraint [Constraint]
constraints)))
RecordCon SourceSpan
_ [Text]
forallVars [Constraint]
constraints Text
name [FieldDecl]
fields' ->
Doc ann
"RecordCon" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ([Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name)] [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Text -> Doc ann) -> [Text] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"forallVars" Text -> Doc ann
forall ann. Text -> Doc ann
docText [Text]
forallVars [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Constraint -> Doc ann) -> [Constraint] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"constraints" Constraint -> Doc ann
forall ann. Constraint -> Doc ann
docConstraint [Constraint]
constraints [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (FieldDecl -> Doc ann) -> [FieldDecl] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"fields" FieldDecl -> Doc ann
forall ann. FieldDecl -> Doc ann
docFieldDecl [FieldDecl]
fields')))
GadtCon SourceSpan
_ [TyVarBinder]
forallBinders [Constraint]
constraints [Text]
names GadtBody
body ->
Doc ann
"GadtCon" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma (Text -> (Text -> Doc ann) -> [Text] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"names" Text -> Doc ann
forall ann. Text -> Doc ann
docText [Text]
names [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (TyVarBinder -> Doc ann) -> [TyVarBinder] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"forallBinders" TyVarBinder -> Doc ann
forall ann. TyVarBinder -> Doc ann
docTyVarBinder [TyVarBinder]
forallBinders [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Constraint -> Doc ann) -> [Constraint] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"constraints" Constraint -> Doc ann
forall ann. Constraint -> Doc ann
docConstraint [Constraint]
constraints [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"body" (GadtBody -> Doc ann
forall ann. GadtBody -> Doc ann
docGadtBody GadtBody
body)])))
docGadtBody :: GadtBody -> Doc ann
docGadtBody :: forall ann. GadtBody -> Doc ann
docGadtBody GadtBody
body =
case GadtBody
body of
GadtPrefixBody [BangType]
args Type
resultTy ->
Doc ann
"GadtPrefixBody" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma (Text -> (BangType -> Doc ann) -> [BangType] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"args" BangType -> Doc ann
forall ann. BangType -> Doc ann
docBangType [BangType]
args [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"result" (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
resultTy)])))
GadtRecordBody [FieldDecl]
fields' Type
resultTy ->
Doc ann
"GadtRecordBody" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma (Text -> (FieldDecl -> Doc ann) -> [FieldDecl] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"fields" FieldDecl -> Doc ann
forall ann. FieldDecl -> Doc ann
docFieldDecl [FieldDecl]
fields' [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"result" (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
resultTy)])))
docBangType :: BangType -> Doc ann
docBangType :: forall ann. BangType -> Doc ann
docBangType BangType
bt =
Doc ann
"BangType" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Doc ann]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
Text -> Bool -> [Doc ann]
forall ann. Text -> Bool -> [Doc ann]
boolField Text
"strict" (BangType -> Bool
bangStrict BangType
bt)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"type" (Type -> Doc ann
forall ann. Type -> Doc ann
docType (BangType -> Type
bangType BangType
bt))]
docFieldDecl :: FieldDecl -> Doc ann
docFieldDecl :: forall ann. FieldDecl -> Doc ann
docFieldDecl FieldDecl
fd =
Doc ann
"FieldDecl" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"names" ([Text] -> Doc ann
forall ann. [Text] -> Doc ann
docTextList (FieldDecl -> [Text]
fieldNames FieldDecl
fd)), Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"type" (BangType -> Doc ann
forall ann. BangType -> Doc ann
docBangType (FieldDecl -> BangType
fieldType FieldDecl
fd))]))
docDerivingClause :: DerivingClause -> Doc ann
docDerivingClause :: forall ann. DerivingClause -> Doc ann
docDerivingClause DerivingClause
dc =
Doc ann
"DerivingClause" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Doc ann]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
Text
-> (DerivingStrategy -> Doc ann)
-> Maybe DerivingStrategy
-> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"strategy" DerivingStrategy -> Doc ann
forall ann. DerivingStrategy -> Doc ann
docDerivingStrategy (DerivingClause -> Maybe DerivingStrategy
derivingStrategy DerivingClause
dc)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Text -> Doc ann) -> [Text] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"classes" Text -> Doc ann
forall ann. Text -> Doc ann
docText (DerivingClause -> [Text]
derivingClasses DerivingClause
dc)
docDerivingStrategy :: DerivingStrategy -> Doc ann
docDerivingStrategy :: forall ann. DerivingStrategy -> Doc ann
docDerivingStrategy DerivingStrategy
ds =
case DerivingStrategy
ds of
DerivingStrategy
DerivingStock -> Doc ann
"DerivingStock"
DerivingStrategy
DerivingNewtype -> Doc ann
"DerivingNewtype"
DerivingStrategy
DerivingAnyclass -> Doc ann
"DerivingAnyclass"
docClassDecl :: ClassDecl -> Doc ann
docClassDecl :: forall ann. ClassDecl -> Doc ann
docClassDecl ClassDecl
cd =
Doc ann
"ClassDecl" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Doc ann]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
[Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText (ClassDecl -> Text
classDeclName ClassDecl
cd))]
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text
-> ([Constraint] -> Doc ann) -> Maybe [Constraint] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"context" (Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets (Doc ann -> Doc ann)
-> ([Constraint] -> Doc ann) -> [Constraint] -> Doc ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep ([Doc ann] -> Doc ann)
-> ([Constraint] -> [Doc ann]) -> [Constraint] -> Doc ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ([Doc ann] -> [Doc ann])
-> ([Constraint] -> [Doc ann]) -> [Constraint] -> [Doc ann]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Constraint -> Doc ann) -> [Constraint] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Constraint -> Doc ann
forall ann. Constraint -> Doc ann
docConstraint) (ClassDecl -> Maybe [Constraint]
classDeclContext ClassDecl
cd)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (TyVarBinder -> Doc ann) -> [TyVarBinder] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"params" TyVarBinder -> Doc ann
forall ann. TyVarBinder -> Doc ann
docTyVarBinder (ClassDecl -> [TyVarBinder]
classDeclParams ClassDecl
cd)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (ClassDeclItem -> Doc ann) -> [ClassDeclItem] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"items" ClassDeclItem -> Doc ann
forall ann. ClassDeclItem -> Doc ann
docClassDeclItem (ClassDecl -> [ClassDeclItem]
classDeclItems ClassDecl
cd)
docClassDeclItem :: ClassDeclItem -> Doc ann
docClassDeclItem :: forall ann. ClassDeclItem -> Doc ann
docClassDeclItem ClassDeclItem
item =
case ClassDeclItem
item of
ClassItemTypeSig SourceSpan
_ [Text]
names Type
ty -> Doc ann
"ClassItemTypeSig" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"names" ([Text] -> Doc ann
forall ann. [Text] -> Doc ann
docTextList [Text]
names), Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"type" (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
ty)]))
ClassItemFixity SourceSpan
_ FixityAssoc
assoc Maybe Int
mPrec [Text]
ops -> Doc ann
"ClassItemFixity" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ([Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"assoc" (FixityAssoc -> Doc ann
forall ann. FixityAssoc -> Doc ann
docFixityAssoc FixityAssoc
assoc)] [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Int -> Doc ann) -> Maybe Int -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"prec" Int -> Doc ann
forall ann. Int -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Maybe Int
mPrec [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"ops" ([Text] -> Doc ann
forall ann. [Text] -> Doc ann
docTextList [Text]
ops)])))
ClassItemDefault SourceSpan
_ ValueDecl
vdecl -> Doc ann
"ClassItemDefault" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (ValueDecl -> Doc ann
forall ann. ValueDecl -> Doc ann
docValueDecl ValueDecl
vdecl)
docInstanceDecl :: InstanceDecl -> Doc ann
docInstanceDecl :: forall ann. InstanceDecl -> Doc ann
docInstanceDecl InstanceDecl
inst =
Doc ann
"InstanceDecl" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Doc ann]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
[Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"className" (Text -> Doc ann
forall ann. Text -> Doc ann
docText (InstanceDecl -> Text
instanceDeclClassName InstanceDecl
inst))]
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Constraint -> Doc ann) -> [Constraint] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"context" Constraint -> Doc ann
forall ann. Constraint -> Doc ann
docConstraint (InstanceDecl -> [Constraint]
instanceDeclContext InstanceDecl
inst)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"types" (Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Type -> Doc ann) -> [Type] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Type -> Doc ann
forall ann. Type -> Doc ann
docType (InstanceDecl -> [Type]
instanceDeclTypes InstanceDecl
inst)))))]
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text
-> (InstanceDeclItem -> Doc ann) -> [InstanceDeclItem] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"items" InstanceDeclItem -> Doc ann
forall ann. InstanceDeclItem -> Doc ann
docInstanceDeclItem (InstanceDecl -> [InstanceDeclItem]
instanceDeclItems InstanceDecl
inst)
docInstanceDeclItem :: InstanceDeclItem -> Doc ann
docInstanceDeclItem :: forall ann. InstanceDeclItem -> Doc ann
docInstanceDeclItem InstanceDeclItem
item =
case InstanceDeclItem
item of
InstanceItemBind SourceSpan
_ ValueDecl
vdecl -> Doc ann
"InstanceItemBind" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (ValueDecl -> Doc ann
forall ann. ValueDecl -> Doc ann
docValueDecl ValueDecl
vdecl)
InstanceItemTypeSig SourceSpan
_ [Text]
names Type
ty -> Doc ann
"InstanceItemTypeSig" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"names" ([Text] -> Doc ann
forall ann. [Text] -> Doc ann
docTextList [Text]
names), Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"type" (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
ty)]))
InstanceItemFixity SourceSpan
_ FixityAssoc
assoc Maybe Int
mPrec [Text]
ops -> Doc ann
"InstanceItemFixity" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ([Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"assoc" (FixityAssoc -> Doc ann
forall ann. FixityAssoc -> Doc ann
docFixityAssoc FixityAssoc
assoc)] [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Int -> Doc ann) -> Maybe Int -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"prec" Int -> Doc ann
forall ann. Int -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Maybe Int
mPrec [Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"ops" ([Text] -> Doc ann
forall ann. [Text] -> Doc ann
docTextList [Text]
ops)])))
docStandaloneDerivingDecl :: StandaloneDerivingDecl -> Doc ann
docStandaloneDerivingDecl :: forall ann. StandaloneDerivingDecl -> Doc ann
docStandaloneDerivingDecl StandaloneDerivingDecl
sd =
Doc ann
"StandaloneDerivingDecl" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Doc ann]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
[Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"className" (Text -> Doc ann
forall ann. Text -> Doc ann
docText (StandaloneDerivingDecl -> Text
standaloneDerivingClassName StandaloneDerivingDecl
sd))]
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text
-> (DerivingStrategy -> Doc ann)
-> Maybe DerivingStrategy
-> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"strategy" DerivingStrategy -> Doc ann
forall ann. DerivingStrategy -> Doc ann
docDerivingStrategy (StandaloneDerivingDecl -> Maybe DerivingStrategy
standaloneDerivingStrategy StandaloneDerivingDecl
sd)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Constraint -> Doc ann) -> [Constraint] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"context" Constraint -> Doc ann
forall ann. Constraint -> Doc ann
docConstraint (StandaloneDerivingDecl -> [Constraint]
standaloneDerivingContext StandaloneDerivingDecl
sd)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"types" (Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Type -> Doc ann) -> [Type] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Type -> Doc ann
forall ann. Type -> Doc ann
docType (StandaloneDerivingDecl -> [Type]
standaloneDerivingTypes StandaloneDerivingDecl
sd)))))]
docForeignDecl :: ForeignDecl -> Doc ann
docForeignDecl :: forall ann. ForeignDecl -> Doc ann
docForeignDecl ForeignDecl
fd =
Doc ann
"ForeignDecl" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Doc ann]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
[Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"direction" (ForeignDirection -> Doc ann
forall ann. ForeignDirection -> Doc ann
docForeignDirection (ForeignDecl -> ForeignDirection
foreignDirection ForeignDecl
fd))]
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"callConv" (CallConv -> Doc ann
forall ann. CallConv -> Doc ann
docCallConv (ForeignDecl -> CallConv
foreignCallConv ForeignDecl
fd))]
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text
-> (ForeignSafety -> Doc ann) -> Maybe ForeignSafety -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"safety" ForeignSafety -> Doc ann
forall ann. ForeignSafety -> Doc ann
docForeignSafety (ForeignDecl -> Maybe ForeignSafety
foreignSafety ForeignDecl
fd)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"entity" (ForeignEntitySpec -> Doc ann
forall ann. ForeignEntitySpec -> Doc ann
docForeignEntitySpec (ForeignDecl -> ForeignEntitySpec
foreignEntity ForeignDecl
fd))]
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText (ForeignDecl -> Text
foreignName ForeignDecl
fd))]
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"type" (Type -> Doc ann
forall ann. Type -> Doc ann
docType (ForeignDecl -> Type
foreignType ForeignDecl
fd))]
docForeignDirection :: ForeignDirection -> Doc ann
docForeignDirection :: forall ann. ForeignDirection -> Doc ann
docForeignDirection ForeignDirection
fd =
case ForeignDirection
fd of
ForeignDirection
ForeignImport -> Doc ann
"ForeignImport"
ForeignDirection
ForeignExport -> Doc ann
"ForeignExport"
docCallConv :: CallConv -> Doc ann
docCallConv :: forall ann. CallConv -> Doc ann
docCallConv CallConv
cc =
case CallConv
cc of
CallConv
CCall -> Doc ann
"CCall"
CallConv
StdCall -> Doc ann
"StdCall"
docForeignSafety :: ForeignSafety -> Doc ann
docForeignSafety :: forall ann. ForeignSafety -> Doc ann
docForeignSafety ForeignSafety
fs =
case ForeignSafety
fs of
ForeignSafety
Safe -> Doc ann
"Safe"
ForeignSafety
Unsafe -> Doc ann
"Unsafe"
docForeignEntitySpec :: ForeignEntitySpec -> Doc ann
docForeignEntitySpec :: forall ann. ForeignEntitySpec -> Doc ann
docForeignEntitySpec ForeignEntitySpec
spec =
case ForeignEntitySpec
spec of
ForeignEntitySpec
ForeignEntityDynamic -> Doc ann
"ForeignEntityDynamic"
ForeignEntitySpec
ForeignEntityWrapper -> Doc ann
"ForeignEntityWrapper"
ForeignEntityStatic Maybe Text
mName -> Doc ann
"ForeignEntityStatic" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> (Text -> Doc ann) -> Maybe Text -> Doc ann
forall a ann. (a -> Doc ann) -> Maybe a -> Doc ann
optionalField' Text -> Doc ann
forall ann. Text -> Doc ann
docText Maybe Text
mName
ForeignEntityAddress Maybe Text
mName -> Doc ann
"ForeignEntityAddress" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> (Text -> Doc ann) -> Maybe Text -> Doc ann
forall a ann. (a -> Doc ann) -> Maybe a -> Doc ann
optionalField' Text -> Doc ann
forall ann. Text -> Doc ann
docText Maybe Text
mName
ForeignEntityNamed Text
name -> Doc ann
"ForeignEntityNamed" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
ForeignEntitySpec
ForeignEntityOmitted -> Doc ann
"ForeignEntityOmitted"
docFixityAssoc :: FixityAssoc -> Doc ann
docFixityAssoc :: forall ann. FixityAssoc -> Doc ann
docFixityAssoc FixityAssoc
fa =
case FixityAssoc
fa of
FixityAssoc
Infix -> Doc ann
"Infix"
FixityAssoc
InfixL -> Doc ann
"InfixL"
FixityAssoc
InfixR -> Doc ann
"InfixR"
docType :: Type -> Doc ann
docType :: forall ann. Type -> Doc ann
docType Type
ty =
case Type
ty of
TVar SourceSpan
_ Text
name -> Doc ann
"TVar" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
TCon SourceSpan
_ Text
name TypePromotion
promoted ->
if TypePromotion
promoted TypePromotion -> TypePromotion -> Bool
forall a. Eq a => a -> a -> Bool
== TypePromotion
Promoted
then Doc ann
"TConPromoted" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
else Doc ann
"TCon" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
TTypeLit SourceSpan
_ TypeLiteral
lit -> Doc ann
"TTypeLit" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> TypeLiteral -> Doc ann
forall ann. TypeLiteral -> Doc ann
docTypeLiteral TypeLiteral
lit
TStar SourceSpan
_ -> Doc ann
"TStar"
TQuasiQuote SourceSpan
_ Text
quoter Text
body -> Doc ann
"TQuasiQuote" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
quoter Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
body
TForall SourceSpan
_ [Text]
binders Type
inner -> Doc ann
"TForall" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Text -> Doc ann) -> [Text] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Text -> Doc ann
forall ann. Text -> Doc ann
docText [Text]
binders))) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
inner)
TApp SourceSpan
_ Type
f Type
x -> Doc ann
"TApp" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
f) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
x)
TFun SourceSpan
_ Type
a Type
b -> Doc ann
"TFun" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
a) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
b)
TTuple SourceSpan
_ TypePromotion
promoted [Type]
elems ->
(if TypePromotion
promoted TypePromotion -> TypePromotion -> Bool
forall a. Eq a => a -> a -> Bool
== TypePromotion
Promoted then Doc ann
"TTuplePromoted" else Doc ann
"TTuple")
Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Type -> Doc ann) -> [Type] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Type -> Doc ann
forall ann. Type -> Doc ann
docType [Type]
elems)))
TList SourceSpan
_ TypePromotion
promoted Type
inner ->
(if TypePromotion
promoted TypePromotion -> TypePromotion -> Bool
forall a. Eq a => a -> a -> Bool
== TypePromotion
Promoted then Doc ann
"TListPromoted" else Doc ann
"TList")
Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
inner)
TParen SourceSpan
_ Type
inner -> Doc ann
"TParen" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
inner)
TContext SourceSpan
_ [Constraint]
constraints Type
inner -> Doc ann
"TContext" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Constraint -> Doc ann) -> [Constraint] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Constraint -> Doc ann
forall ann. Constraint -> Doc ann
docConstraint [Constraint]
constraints))) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
inner)
docTypeLiteral :: TypeLiteral -> Doc ann
docTypeLiteral :: forall ann. TypeLiteral -> Doc ann
docTypeLiteral TypeLiteral
lit =
case TypeLiteral
lit of
TypeLitInteger Integer
n Text
_ -> Doc ann
"TypeLitInteger" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Integer -> Doc ann
forall ann. Integer -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Integer
n
TypeLitSymbol Text
s Text
_ -> Doc ann
"TypeLitSymbol" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
s
TypeLitChar Char
c Text
_ -> Doc ann
"TypeLitChar" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty (Char -> String
forall a. Show a => a -> String
show Char
c)
docConstraint :: Constraint -> Doc ann
docConstraint :: forall ann. Constraint -> Doc ann
docConstraint Constraint
c =
Doc ann
"Constraint" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Doc ann]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
[Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"class" (Text -> Doc ann
forall ann. Text -> Doc ann
docText (Constraint -> Text
constraintClass Constraint
c))]
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Type -> Doc ann) -> [Type] -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
"args" Type -> Doc ann
forall ann. Type -> Doc ann
docType (Constraint -> [Type]
constraintArgs Constraint
c)
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> Bool -> [Doc ann]
forall ann. Text -> Bool -> [Doc ann]
boolField Text
"paren" (Constraint -> Bool
constraintParen Constraint
c)
docTyVarBinder :: TyVarBinder -> Doc ann
docTyVarBinder :: forall ann. TyVarBinder -> Doc ann
docTyVarBinder TyVarBinder
tvb =
Doc ann
"TyVarBinder" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Doc ann]
forall {ann}. [Doc ann]
fields))
where
fields :: [Doc ann]
fields =
[Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
"name" (Text -> Doc ann
forall ann. Text -> Doc ann
docText (TyVarBinder -> Text
tyVarBinderName TyVarBinder
tvb))]
[Doc ann] -> [Doc ann] -> [Doc ann]
forall a. Semigroup a => a -> a -> a
<> Text -> (Type -> Doc ann) -> Maybe Type -> [Doc ann]
forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
"kind" Type -> Doc ann
forall ann. Type -> Doc ann
docType (TyVarBinder -> Maybe Type
tyVarBinderKind TyVarBinder
tvb)
docPattern :: Pattern -> Doc ann
docPattern :: forall ann. Pattern -> Doc ann
docPattern Pattern
pat =
case Pattern
pat of
PVar SourceSpan
_ Text
name -> Doc ann
"PVar" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
PWildcard SourceSpan
_ -> Doc ann
"PWildcard"
PLit SourceSpan
_ Literal
lit -> Doc ann
"PLit" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Literal -> Doc ann
forall ann. Literal -> Doc ann
docLiteral Literal
lit)
PQuasiQuote SourceSpan
_ Text
quoter Text
body -> Doc ann
"PQuasiQuote" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
quoter Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
body
PTuple SourceSpan
_ [Pattern]
elems -> Doc ann
"PTuple" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Pattern -> Doc ann) -> [Pattern] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern [Pattern]
elems)))
PList SourceSpan
_ [Pattern]
elems -> Doc ann
"PList" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Pattern -> Doc ann) -> [Pattern] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern [Pattern]
elems)))
PCon SourceSpan
_ Text
name [Pattern]
args -> Doc ann
"PCon" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Pattern -> Doc ann) -> [Pattern] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern [Pattern]
args)))
PInfix SourceSpan
_ Pattern
lhs Text
op Pattern
rhs -> Doc ann
"PInfix" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern Pattern
lhs) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
op Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern Pattern
rhs)
PView SourceSpan
_ Expr
expr Pattern
inner -> Doc ann
"PView" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
expr) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern Pattern
inner)
PAs SourceSpan
_ Text
name Pattern
inner -> Doc ann
"PAs" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern Pattern
inner)
PStrict SourceSpan
_ Pattern
inner -> Doc ann
"PStrict" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern Pattern
inner)
PIrrefutable SourceSpan
_ Pattern
inner -> Doc ann
"PIrrefutable" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern Pattern
inner)
PNegLit SourceSpan
_ Literal
lit -> Doc ann
"PNegLit" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Literal -> Doc ann
forall ann. Literal -> Doc ann
docLiteral Literal
lit)
PParen SourceSpan
_ Pattern
inner -> Doc ann
"PParen" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern Pattern
inner)
PRecord SourceSpan
_ Text
name [(Text, Pattern)]
fields' -> Doc ann
"PRecord" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
fn Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"=" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern Pattern
fp | (Text
fn, Pattern
fp) <- [(Text, Pattern)]
fields']))
docLiteral :: Literal -> Doc ann
docLiteral :: forall ann. Literal -> Doc ann
docLiteral Literal
lit =
case Literal
lit of
LitInt SourceSpan
_ Integer
n Text
_ -> Doc ann
"LitInt" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Integer -> Doc ann
forall ann. Integer -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Integer
n
LitIntBase SourceSpan
_ Integer
n Text
repr -> Doc ann
"LitIntBase" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Integer -> Doc ann
forall ann. Integer -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Integer
n Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
repr
LitFloat SourceSpan
_ Double
n Text
_ -> Doc ann
"LitFloat" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Double -> Doc ann
forall ann. Double -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Double
n
LitChar SourceSpan
_ Char
c Text
_ -> Doc ann
"LitChar" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty (Char -> String
forall a. Show a => a -> String
show Char
c)
LitString SourceSpan
_ Text
s Text
_ -> Doc ann
"LitString" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
s
docExpr :: Expr -> Doc ann
docExpr :: forall ann. Expr -> Doc ann
docExpr Expr
expr =
case Expr
expr of
EVar SourceSpan
_ Text
name -> Doc ann
"EVar" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
EInt SourceSpan
_ Integer
n Text
_ -> Doc ann
"EInt" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Integer -> Doc ann
forall ann. Integer -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Integer
n
EIntBase SourceSpan
_ Integer
n Text
repr -> Doc ann
"EIntBase" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Integer -> Doc ann
forall ann. Integer -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Integer
n Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
repr
EFloat SourceSpan
_ Double
n Text
_ -> Doc ann
"EFloat" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Double -> Doc ann
forall ann. Double -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Double
n
EChar SourceSpan
_ Char
c Text
_ -> Doc ann
"EChar" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty (Char -> String
forall a. Show a => a -> String
show Char
c)
EString SourceSpan
_ Text
s Text
_ -> Doc ann
"EString" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
s
EQuasiQuote SourceSpan
_ Text
quoter Text
body -> Doc ann
"EQuasiQuote" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
quoter Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
body
EIf SourceSpan
_ Expr
cond Expr
yes Expr
no -> Doc ann
"EIf" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
cond) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
yes) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
no)
ELambdaPats SourceSpan
_ [Pattern]
pats Expr
body -> Doc ann
"ELambdaPats" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Pattern -> Doc ann) -> [Pattern] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern [Pattern]
pats))) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
body)
ELambdaCase SourceSpan
_ [CaseAlt]
alts -> Doc ann
"ELambdaCase" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((CaseAlt -> Doc ann) -> [CaseAlt] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map CaseAlt -> Doc ann
forall ann. CaseAlt -> Doc ann
docCaseAlt [CaseAlt]
alts)))
EInfix SourceSpan
_ Expr
lhs Text
op Expr
rhs -> Doc ann
"EInfix" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
lhs) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
op Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
rhs)
ENegate SourceSpan
_ Expr
inner -> Doc ann
"ENegate" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
inner)
ESectionL SourceSpan
_ Expr
lhs Text
op -> Doc ann
"ESectionL" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
lhs) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
op
ESectionR SourceSpan
_ Text
op Expr
rhs -> Doc ann
"ESectionR" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
op Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
rhs)
ELetDecls SourceSpan
_ [Decl]
decls Expr
body -> Doc ann
"ELetDecls" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Decl -> Doc ann) -> [Decl] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Decl -> Doc ann
forall ann. Decl -> Doc ann
docDecl [Decl]
decls))) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
body)
ECase SourceSpan
_ Expr
scrutinee [CaseAlt]
alts -> Doc ann
"ECase" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
scrutinee) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((CaseAlt -> Doc ann) -> [CaseAlt] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map CaseAlt -> Doc ann
forall ann. CaseAlt -> Doc ann
docCaseAlt [CaseAlt]
alts)))
EDo SourceSpan
_ [DoStmt]
stmts -> Doc ann
"EDo" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((DoStmt -> Doc ann) -> [DoStmt] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map DoStmt -> Doc ann
forall ann. DoStmt -> Doc ann
docDoStmt [DoStmt]
stmts)))
EListComp SourceSpan
_ Expr
body [CompStmt]
quals -> Doc ann
"EListComp" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
body) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((CompStmt -> Doc ann) -> [CompStmt] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map CompStmt -> Doc ann
forall ann. CompStmt -> Doc ann
docCompStmt [CompStmt]
quals)))
EListCompParallel SourceSpan
_ Expr
body [[CompStmt]]
qualGroups -> Doc ann
"EListCompParallel" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
body) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
"|" [Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((CompStmt -> Doc ann) -> [CompStmt] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map CompStmt -> Doc ann
forall ann. CompStmt -> Doc ann
docCompStmt [CompStmt]
qs))) | [CompStmt]
qs <- [[CompStmt]]
qualGroups]))
EArithSeq SourceSpan
_ ArithSeq
seqInfo -> Doc ann
"EArithSeq" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (ArithSeq -> Doc ann
forall ann. ArithSeq -> Doc ann
docArithSeq ArithSeq
seqInfo)
ERecordCon SourceSpan
_ Text
name [(Text, Expr)]
fields' -> Doc ann
"ERecordCon" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
fn Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"=" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
fv | (Text
fn, Expr
fv) <- [(Text, Expr)]
fields']))
ERecordUpd SourceSpan
_ Expr
base [(Text, Expr)]
fields' -> Doc ann
"ERecordUpd" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
base) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
fn Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"=" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
fv | (Text
fn, Expr
fv) <- [(Text, Expr)]
fields']))
ETypeSig SourceSpan
_ Expr
inner Type
ty -> Doc ann
"ETypeSig" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
inner) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
ty)
EParen SourceSpan
_ Expr
inner -> Doc ann
"EParen" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
inner)
EWhereDecls SourceSpan
_ Expr
body [Decl]
decls -> Doc ann
"EWhereDecls" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
body) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Decl -> Doc ann) -> [Decl] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Decl -> Doc ann
forall ann. Decl -> Doc ann
docDecl [Decl]
decls)))
EList SourceSpan
_ [Expr]
elems -> Doc ann
"EList" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Expr -> Doc ann) -> [Expr] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr [Expr]
elems)))
ETuple SourceSpan
_ [Expr]
elems -> Doc ann
"ETuple" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Expr -> Doc ann) -> [Expr] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr [Expr]
elems)))
ETupleSection SourceSpan
_ [Maybe Expr]
elems -> Doc ann
"ETupleSection" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Maybe Expr -> Doc ann) -> [Maybe Expr] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map (Doc ann -> (Expr -> Doc ann) -> Maybe Expr -> Doc ann
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Doc ann
"_" Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr) [Maybe Expr]
elems)))
ETupleCon SourceSpan
_ Int
arity -> Doc ann
"ETupleCon" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Int -> Doc ann
forall ann. Int -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int
arity
ETypeApp SourceSpan
_ Expr
inner Type
ty -> Doc ann
"ETypeApp" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
inner) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Type -> Doc ann
forall ann. Type -> Doc ann
docType Type
ty)
EApp SourceSpan
_ Expr
f Expr
x -> Doc ann
"EApp" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
f) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
x)
docCaseAlt :: CaseAlt -> Doc ann
docCaseAlt :: forall ann. CaseAlt -> Doc ann
docCaseAlt (CaseAlt SourceSpan
_ Pattern
pat Rhs
rhs) =
Doc ann
"CaseAlt" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern Pattern
pat) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Rhs -> Doc ann
forall ann. Rhs -> Doc ann
docRhs Rhs
rhs)
docDoStmt :: DoStmt -> Doc ann
docDoStmt :: forall ann. DoStmt -> Doc ann
docDoStmt DoStmt
stmt =
case DoStmt
stmt of
DoBind SourceSpan
_ Pattern
pat Expr
expr -> Doc ann
"DoBind" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern Pattern
pat) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
expr)
DoLet SourceSpan
_ [(Text, Expr)]
bindings -> Doc ann
"DoLet" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"=" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
e | (Text
name, Expr
e) <- [(Text, Expr)]
bindings]))
DoLetDecls SourceSpan
_ [Decl]
decls -> Doc ann
"DoLetDecls" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Decl -> Doc ann) -> [Decl] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Decl -> Doc ann
forall ann. Decl -> Doc ann
docDecl [Decl]
decls)))
DoExpr SourceSpan
_ Expr
expr -> Doc ann
"DoExpr" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
expr)
docCompStmt :: CompStmt -> Doc ann
docCompStmt :: forall ann. CompStmt -> Doc ann
docCompStmt CompStmt
stmt =
case CompStmt
stmt of
CompGen SourceSpan
_ Pattern
pat Expr
expr -> Doc ann
"CompGen" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Pattern -> Doc ann
forall ann. Pattern -> Doc ann
docPattern Pattern
pat) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
expr)
CompGuard SourceSpan
_ Expr
expr -> Doc ann
"CompGuard" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
expr)
CompLet SourceSpan
_ [(Text, Expr)]
bindings -> Doc ann
"CompLet" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
braces ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma [Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"=" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
e | (Text
name, Expr
e) <- [(Text, Expr)]
bindings]))
CompLetDecls SourceSpan
_ [Decl]
decls -> Doc ann
"CompLetDecls" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Decl -> Doc ann) -> [Decl] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Decl -> Doc ann
forall ann. Decl -> Doc ann
docDecl [Decl]
decls)))
docArithSeq :: ArithSeq -> Doc ann
docArithSeq :: forall ann. ArithSeq -> Doc ann
docArithSeq ArithSeq
seqInfo =
case ArithSeq
seqInfo of
ArithSeqFrom SourceSpan
_ Expr
from -> Doc ann
"ArithSeqFrom" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
from)
ArithSeqFromThen SourceSpan
_ Expr
from Expr
thn -> Doc ann
"ArithSeqFromThen" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
from) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
thn)
ArithSeqFromTo SourceSpan
_ Expr
from Expr
to -> Doc ann
"ArithSeqFromTo" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
from) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
to)
ArithSeqFromThenTo SourceSpan
_ Expr
from Expr
thn Expr
to -> Doc ann
"ArithSeqFromThenTo" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
from) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
thn) Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
parens (Expr -> Doc ann
forall ann. Expr -> Doc ann
docExpr Expr
to)
docToken :: LexToken -> Doc ann
docToken :: forall ann. LexToken -> Doc ann
docToken LexToken
tok = LexTokenKind -> Doc ann
forall ann. LexTokenKind -> Doc ann
docTokenKind (LexToken -> LexTokenKind
lexTokenKind LexToken
tok)
docTokenKind :: LexTokenKind -> Doc ann
docTokenKind :: forall ann. LexTokenKind -> Doc ann
docTokenKind LexTokenKind
kind =
case LexTokenKind
kind of
LexTokenKind
TkKeywordCase -> Doc ann
"TkKeywordCase"
LexTokenKind
TkKeywordClass -> Doc ann
"TkKeywordClass"
LexTokenKind
TkKeywordData -> Doc ann
"TkKeywordData"
LexTokenKind
TkKeywordDefault -> Doc ann
"TkKeywordDefault"
LexTokenKind
TkKeywordDeriving -> Doc ann
"TkKeywordDeriving"
LexTokenKind
TkKeywordDo -> Doc ann
"TkKeywordDo"
LexTokenKind
TkKeywordElse -> Doc ann
"TkKeywordElse"
LexTokenKind
TkKeywordForeign -> Doc ann
"TkKeywordForeign"
LexTokenKind
TkKeywordIf -> Doc ann
"TkKeywordIf"
LexTokenKind
TkKeywordImport -> Doc ann
"TkKeywordImport"
LexTokenKind
TkKeywordIn -> Doc ann
"TkKeywordIn"
LexTokenKind
TkKeywordInfix -> Doc ann
"TkKeywordInfix"
LexTokenKind
TkKeywordInfixl -> Doc ann
"TkKeywordInfixl"
LexTokenKind
TkKeywordInfixr -> Doc ann
"TkKeywordInfixr"
LexTokenKind
TkKeywordInstance -> Doc ann
"TkKeywordInstance"
LexTokenKind
TkKeywordLet -> Doc ann
"TkKeywordLet"
LexTokenKind
TkKeywordModule -> Doc ann
"TkKeywordModule"
LexTokenKind
TkKeywordNewtype -> Doc ann
"TkKeywordNewtype"
LexTokenKind
TkKeywordOf -> Doc ann
"TkKeywordOf"
LexTokenKind
TkKeywordThen -> Doc ann
"TkKeywordThen"
LexTokenKind
TkKeywordType -> Doc ann
"TkKeywordType"
LexTokenKind
TkKeywordWhere -> Doc ann
"TkKeywordWhere"
LexTokenKind
TkKeywordUnderscore -> Doc ann
"TkKeywordUnderscore"
LexTokenKind
TkKeywordQualified -> Doc ann
"TkKeywordQualified"
LexTokenKind
TkKeywordAs -> Doc ann
"TkKeywordAs"
LexTokenKind
TkKeywordHiding -> Doc ann
"TkKeywordHiding"
LexTokenKind
TkReservedDotDot -> Doc ann
"TkReservedDotDot"
LexTokenKind
TkReservedColon -> Doc ann
"TkReservedColon"
LexTokenKind
TkReservedDoubleColon -> Doc ann
"TkReservedDoubleColon"
LexTokenKind
TkReservedEquals -> Doc ann
"TkReservedEquals"
LexTokenKind
TkReservedBackslash -> Doc ann
"TkReservedBackslash"
LexTokenKind
TkReservedPipe -> Doc ann
"TkReservedPipe"
LexTokenKind
TkReservedLeftArrow -> Doc ann
"TkReservedLeftArrow"
LexTokenKind
TkReservedRightArrow -> Doc ann
"TkReservedRightArrow"
LexTokenKind
TkReservedAt -> Doc ann
"TkReservedAt"
LexTokenKind
TkReservedDoubleArrow -> Doc ann
"TkReservedDoubleArrow"
TkVarId Text
name -> Doc ann
"TkVarId" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
TkConId Text
name -> Doc ann
"TkConId" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
TkQVarId Text
name -> Doc ann
"TkQVarId" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
TkQConId Text
name -> Doc ann
"TkQConId" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
TkVarSym Text
name -> Doc ann
"TkVarSym" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
TkConSym Text
name -> Doc ann
"TkConSym" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
TkQVarSym Text
name -> Doc ann
"TkQVarSym" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
TkQConSym Text
name -> Doc ann
"TkQConSym" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
name
TkInteger Integer
n -> Doc ann
"TkInteger" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Integer -> Doc ann
forall ann. Integer -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Integer
n
TkIntegerBase Integer
n Text
repr -> Doc ann
"TkIntegerBase" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Integer -> Doc ann
forall ann. Integer -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Integer
n Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
repr
TkFloat Double
n Text
repr -> Doc ann
"TkFloat" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Double -> Doc ann
forall ann. Double -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Double
n Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
repr
TkChar Char
c -> Doc ann
"TkChar" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty (Char -> String
forall a. Show a => a -> String
show Char
c)
TkString Text
s -> Doc ann
"TkString" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
s
LexTokenKind
TkSpecialLParen -> Doc ann
"TkSpecialLParen"
LexTokenKind
TkSpecialRParen -> Doc ann
"TkSpecialRParen"
LexTokenKind
TkSpecialComma -> Doc ann
"TkSpecialComma"
LexTokenKind
TkSpecialSemicolon -> Doc ann
"TkSpecialSemicolon"
LexTokenKind
TkSpecialLBracket -> Doc ann
"TkSpecialLBracket"
LexTokenKind
TkSpecialRBracket -> Doc ann
"TkSpecialRBracket"
LexTokenKind
TkSpecialBacktick -> Doc ann
"TkSpecialBacktick"
LexTokenKind
TkSpecialLBrace -> Doc ann
"TkSpecialLBrace"
LexTokenKind
TkSpecialRBrace -> Doc ann
"TkSpecialRBrace"
LexTokenKind
TkMinusOperator -> Doc ann
"TkMinusOperator"
LexTokenKind
TkPrefixMinus -> Doc ann
"TkPrefixMinus"
LexTokenKind
TkPrefixBang -> Doc ann
"TkPrefixBang"
LexTokenKind
TkPrefixTilde -> Doc ann
"TkPrefixTilde"
TkPragmaLanguage [ExtensionSetting]
settings -> Doc ann
"TkPragmaLanguage" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((ExtensionSetting -> Doc ann) -> [ExtensionSetting] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map ExtensionSetting -> Doc ann
forall ann. ExtensionSetting -> Doc ann
docExtensionSetting [ExtensionSetting]
settings)))
TkPragmaWarning Text
msg -> Doc ann
"TkPragmaWarning" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
msg
TkPragmaDeprecated Text
msg -> Doc ann
"TkPragmaDeprecated" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
msg
TkQuasiQuote Text
quoter Text
body -> Doc ann
"TkQuasiQuote" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
quoter Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
body
TkError Text
msg -> Doc ann
"TkError" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Text -> Doc ann
forall ann. Text -> Doc ann
docText Text
msg
field :: Text -> Doc ann -> Doc ann
field :: forall ann. Text -> Doc ann -> Doc ann
field Text
name Doc ann
val = Text -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Text -> Doc ann
pretty Text
name Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"=" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
val
optionalField :: Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField :: forall a ann. Text -> (a -> Doc ann) -> Maybe a -> [Doc ann]
optionalField Text
name a -> Doc ann
f Maybe a
mVal =
case Maybe a
mVal of
Just a
val -> [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
name (a -> Doc ann
f a
val)]
Maybe a
Nothing -> []
optionalField' :: (a -> Doc ann) -> Maybe a -> Doc ann
optionalField' :: forall a ann. (a -> Doc ann) -> Maybe a -> Doc ann
optionalField' a -> Doc ann
f Maybe a
mVal =
case Maybe a
mVal of
Just a
val -> Doc ann
" " Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> a -> Doc ann
f a
val
Maybe a
Nothing -> Doc ann
""
listField :: Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField :: forall a ann. Text -> (a -> Doc ann) -> [a] -> [Doc ann]
listField Text
_ a -> Doc ann
_ [] = []
listField Text
name a -> Doc ann
f [a]
xs = [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
name (Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((a -> Doc ann) -> [a] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map a -> Doc ann
f [a]
xs))))]
boolField :: Text -> Bool -> [Doc ann]
boolField :: forall ann. Text -> Bool -> [Doc ann]
boolField Text
_ Bool
False = []
boolField Text
name Bool
True = [Text -> Doc ann -> Doc ann
forall ann. Text -> Doc ann -> Doc ann
field Text
name Doc ann
"True"]
docText :: Text -> Doc ann
docText :: forall ann. Text -> Doc ann
docText Text
t = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
dquotes (Text -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Text -> Doc ann
pretty Text
t)
docTextList :: [Text] -> Doc ann
docTextList :: forall ann. [Text] -> Doc ann
docTextList [Text]
ts = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets ([Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
hsep (Doc ann -> [Doc ann] -> [Doc ann]
forall ann. Doc ann -> [Doc ann] -> [Doc ann]
punctuate Doc ann
forall ann. Doc ann
comma ((Text -> Doc ann) -> [Text] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
map Text -> Doc ann
forall ann. Text -> Doc ann
docText [Text]
ts)))