From 955664d3d933fc179c8eb88ada027bcba7f3e011 Mon Sep 17 00:00:00 2001 From: Ian Shipman Date: Tue, 5 Jan 2021 13:22:19 -0600 Subject: [PATCH] Changes approach to optional fields --- CHANGELOG.md | 5 + src/Data/Aeson/TypeScript/Formatting.hs | 95 ++-- stack.yaml | 2 +- stack.yaml.lock | 8 +- tags | 673 ++++++++++++++++++++++++ 5 files changed, 732 insertions(+), 51 deletions(-) create mode 100644 tags diff --git a/CHANGELOG.md b/CHANGELOG.md index 729808f..54445bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +## 0.7.0.0 + +Represents optional fields (according to the Haskell model) as required fields +with type `A | null` rather than optional fields. + ## 0.6.2.0 * Expose generic type constructors `T4` through `T10`. (We only exposed `T`, `T1`, `T2`, and `T3` before.) diff --git a/src/Data/Aeson/TypeScript/Formatting.hs b/src/Data/Aeson/TypeScript/Formatting.hs index 9412b53..ca1457c 100644 --- a/src/Data/Aeson/TypeScript/Formatting.hs +++ b/src/Data/Aeson/TypeScript/Formatting.hs @@ -15,58 +15,58 @@ import qualified Data.Text as T import Data.Monoid #endif - -- | Same as 'formatTSDeclarations'', but uses default formatting options. formatTSDeclarations :: [TSDeclaration] -> String formatTSDeclarations = formatTSDeclarations' defaultFormattingOptions -- | Format a single TypeScript declaration. This version accepts a FormattingOptions object in case you want more control over the output. formatTSDeclaration :: FormattingOptions -> TSDeclaration -> String -formatTSDeclaration (FormattingOptions {..}) (TSTypeAlternatives name genericVariables names maybeDoc) = - makeDocPrefix maybeDoc <> mainDeclaration +formatTSDeclaration (FormattingOptions{..}) (TSTypeAlternatives name genericVariables names maybeDoc) = + makeDocPrefix maybeDoc <> mainDeclaration where mainDeclaration = case chooseTypeAlternativesFormat typeAlternativesFormat of - Enum -> [i|#{exportPrefix exportMode}enum #{typeNameModifier name} { #{alternativesEnum} }|] - where - alternativesEnum = T.intercalate ", " $ [toEnumName entry <> "=" <> entry | entry <- T.pack <$> names] - EnumWithType -> [i|#{exportPrefix exportMode}enum #{typeNameModifier name}Enum { #{alternativesEnumWithType} }#{enumType}|] - where - alternativesEnumWithType = T.intercalate ", " $ [toEnumName entry <> "=" <> entry | entry <- T.pack <$> names] - enumType = [i|\n\ntype #{name} = keyof typeof #{typeNameModifier name}Enum;|] :: T.Text - TypeAlias -> [i|#{exportPrefix exportMode}type #{typeNameModifier name}#{getGenericBrackets genericVariables} = #{alternatives};|] - where - alternatives = T.intercalate " | " (fmap T.pack names) + Enum -> [i|#{exportPrefix exportMode}enum #{typeNameModifier name} { #{alternativesEnum} }|] + where + alternativesEnum = T.intercalate ", " $ [toEnumName entry <> "=" <> entry | entry <- T.pack <$> names] + EnumWithType -> [i|#{exportPrefix exportMode}enum #{typeNameModifier name}Enum { #{alternativesEnumWithType} }#{enumType}|] + where + alternativesEnumWithType = T.intercalate ", " $ [toEnumName entry <> "=" <> entry | entry <- T.pack <$> names] + enumType = [i|\n\ntype #{name} = keyof typeof #{typeNameModifier name}Enum;|] :: T.Text + TypeAlias -> [i|#{exportPrefix exportMode}type #{typeNameModifier name}#{getGenericBrackets genericVariables} = #{alternatives};|] + where + alternatives = T.intercalate " | " (fmap T.pack names) -- Only allow certain formats if some checks pass chooseTypeAlternativesFormat Enum - | all isDoubleQuotedString names = Enum - | otherwise = TypeAlias + | all isDoubleQuotedString names = Enum + | otherwise = TypeAlias chooseTypeAlternativesFormat EnumWithType - | all isDoubleQuotedString names = EnumWithType - | otherwise = TypeAlias + | all isDoubleQuotedString names = EnumWithType + | otherwise = TypeAlias chooseTypeAlternativesFormat x = x isDoubleQuotedString s = case A.eitherDecode (BL8.pack s) of - Right (A.String _) -> True - _ -> False + Right (A.String _) -> True + _ -> False toEnumName = T.replace "\"" "" - -formatTSDeclaration (FormattingOptions {..}) (TSInterfaceDeclaration interfaceName genericVariables (filter (not . isNoEmitTypeScriptField) -> members) maybeDoc) = - makeDocPrefix maybeDoc <> [i|#{exportPrefix exportMode}interface #{modifiedInterfaceName}#{getGenericBrackets genericVariables} { +formatTSDeclaration (FormattingOptions{..}) (TSInterfaceDeclaration interfaceName genericVariables (filter (not . isNoEmitTypeScriptField) -> members) maybeDoc) = + makeDocPrefix maybeDoc + <> [i|#{exportPrefix exportMode}interface #{modifiedInterfaceName}#{getGenericBrackets genericVariables} { #{ls} -}|] where - ls = T.intercalate "\n" $ [indentTo numIndentSpaces (T.pack (formatTSField member <> ";")) | member <- members] - modifiedInterfaceName = (\(li, name) -> li <> interfaceNameModifier name) . splitAt 1 $ interfaceName - - formatTSField :: TSField -> String - formatTSField (TSField optional name typ maybeDoc') = makeDocPrefix maybeDoc' <> [i|#{name}#{if optional then ("?" :: String) else ""}: #{typ}|] +}|] + where + ls = T.intercalate "\n" $ [indentTo numIndentSpaces (T.pack (formatTSField member <> ";")) | member <- members] + modifiedInterfaceName = (\(li, name) -> li <> interfaceNameModifier name) . splitAt 1 $ interfaceName + formatTSField :: TSField -> String + formatTSField (TSField optional name typ maybeDoc') = makeDocPrefix maybeDoc' <> [i|#{name}: #{typ}#{if optional then ("| null" :: String) else ""}|] formatTSDeclaration _ (TSRawDeclaration text) = text indentTo :: Int -> T.Text -> T.Text indentTo numIndentSpaces input = T.intercalate "\n" [padding <> line | line <- T.splitOn "\n" input] - where padding = T.replicate numIndentSpaces " " + where + padding = T.replicate numIndentSpaces " " exportPrefix :: ExportMode -> String exportPrefix ExportEach = "export " @@ -75,32 +75,35 @@ exportPrefix ExportNone = "" -- | Format a list of TypeScript declarations into a string, suitable for putting directly into a @.d.ts@ file. formatTSDeclarations' :: FormattingOptions -> [TSDeclaration] -> String formatTSDeclarations' options allDeclarations = - declarations & fmap (T.pack . formatTSDeclaration options) - & T.intercalate "\n\n" - & T.unpack + declarations + & fmap (T.pack . formatTSDeclaration options) + & T.intercalate "\n\n" + & T.unpack where removedDeclarationNames = mapMaybe getDeclarationName (filter isNoEmitTypeScriptDeclaration allDeclarations) where getDeclarationName :: TSDeclaration -> Maybe String - getDeclarationName (TSInterfaceDeclaration {..}) = Just interfaceName - getDeclarationName (TSTypeAlternatives {..}) = Just typeName + getDeclarationName (TSInterfaceDeclaration{..}) = Just interfaceName + getDeclarationName (TSTypeAlternatives{..}) = Just typeName getDeclarationName _ = Nothing removeReferencesToRemovedNames :: [String] -> TSDeclaration -> TSDeclaration - removeReferencesToRemovedNames removedNames decl@(TSTypeAlternatives {..}) = decl { alternativeTypes = [x | x <- alternativeTypes, not (x `L.elem` removedNames)] } + removeReferencesToRemovedNames removedNames decl@(TSTypeAlternatives{..}) = decl{alternativeTypes = [x | x <- alternativeTypes, not (x `L.elem` removedNames)]} removeReferencesToRemovedNames _ x = x - declarations = allDeclarations - & filter (not . isNoEmitTypeScriptDeclaration) - & fmap (removeReferencesToRemovedNames removedDeclarationNames) + declarations = + allDeclarations + & filter (not . isNoEmitTypeScriptDeclaration) + & fmap (removeReferencesToRemovedNames removedDeclarationNames) makeDocPrefix :: Maybe String -> String makeDocPrefix maybeDoc = case maybeDoc of - Nothing -> "" - Just (T.pack -> text) -> ["// " <> line | line <- T.splitOn "\n" text] - & T.intercalate "\n" - & (<> "\n") - & T.unpack + Nothing -> "" + Just (T.pack -> text) -> + ["// " <> line | line <- T.splitOn "\n" text] + & T.intercalate "\n" + & (<> "\n") + & T.unpack getGenericBrackets :: [String] -> String getGenericBrackets [] = "" @@ -112,10 +115,10 @@ noEmitTypeScriptAnnotation :: String noEmitTypeScriptAnnotation = "@no-emit-typescript" isNoEmitTypeScriptField :: TSField -> Bool -isNoEmitTypeScriptField (TSField {fieldDoc=(Just doc)}) = noEmitTypeScriptAnnotation `L.isInfixOf` doc +isNoEmitTypeScriptField (TSField{fieldDoc = (Just doc)}) = noEmitTypeScriptAnnotation `L.isInfixOf` doc isNoEmitTypeScriptField _ = False isNoEmitTypeScriptDeclaration :: TSDeclaration -> Bool -isNoEmitTypeScriptDeclaration (TSInterfaceDeclaration {interfaceDoc=(Just doc)}) = noEmitTypeScriptAnnotation `L.isInfixOf` doc -isNoEmitTypeScriptDeclaration (TSTypeAlternatives {typeDoc=(Just doc)}) = noEmitTypeScriptAnnotation `L.isInfixOf` doc +isNoEmitTypeScriptDeclaration (TSInterfaceDeclaration{interfaceDoc = (Just doc)}) = noEmitTypeScriptAnnotation `L.isInfixOf` doc +isNoEmitTypeScriptDeclaration (TSTypeAlternatives{typeDoc = (Just doc)}) = noEmitTypeScriptAnnotation `L.isInfixOf` doc isNoEmitTypeScriptDeclaration _ = False diff --git a/stack.yaml b/stack.yaml index bfc9a75..8e34e8c 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,5 +1,5 @@ -resolver: nightly-2023-11-14 +resolver: lts-22.7 packages: - . diff --git a/stack.yaml.lock b/stack.yaml.lock index dd4da80..5fe18da 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -6,7 +6,7 @@ packages: [] snapshots: - completed: - sha256: 0eaacfc9de6b0ab46ab6026166d2ba7718ab06a8612086b3ee21d7667e682df0 - size: 698974 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2023/11/14.yaml - original: nightly-2023-11-14 + sha256: 7b975b104cb3dbf0c297dfd01f936a4d2ee523241dd0b1ae960522b833fe3027 + size: 714096 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/22/7.yaml + original: lts-22.7 diff --git a/tags b/tags new file mode 100644 index 0000000..67a150a --- /dev/null +++ b/tags @@ -0,0 +1,673 @@ +!_TAG_FILE_SORTED 1 // +Aeson /home/bsherman/code/aeson-typescript/test/Util/Aeson.hs 3;" m +Aeson test/Util/Aeson.hs 3;" m +AesonKey /home/bsherman/code/aeson-typescript/test/Util/Aeson.hs 12;" t +AesonKey /home/bsherman/code/aeson-typescript/test/Util/Aeson.hs 21;" t +AesonKey test/Util/Aeson.hs 12;" t +AesonKey test/Util/Aeson.hs 21;" t +AesonTypes /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 33;" t +AesonTypes test/TestBoilerplate.hs 33;" t +Bar /home/bsherman/code/aeson-typescript/test/Formatting.hs 42;" C +Bar test/Formatting.hs 42;" C +Basic /home/bsherman/code/aeson-typescript/test/Basic.hs 2;" m +Basic test/Basic.hs 2;" m +ClosedTypeFamilies /home/bsherman/code/aeson-typescript/test/ClosedTypeFamilies.hs 4;" m +ClosedTypeFamilies test/ClosedTypeFamilies.hs 4;" m +Columnar /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 71;" F +Columnar test/TestBoilerplate.hs 71;" F +Complex /home/bsherman/code/aeson-typescript/test/Generic.hs 16;" t +Complex /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 31;" t +Complex test/Generic.hs 16;" t +Complex test/TestBoilerplate.hs 31;" t +Complex2 /home/bsherman/code/aeson-typescript/test/Generic.hs 19;" t +Complex2 test/Generic.hs 19;" t +Complex3 /home/bsherman/code/aeson-typescript/test/Generic.hs 22;" t +Complex3 test/Generic.hs 22;" t +Complex4 /home/bsherman/code/aeson-typescript/test/Generic.hs 25;" t +Complex4 test/Generic.hs 25;" t +Con1 /home/bsherman/code/aeson-typescript/test/Formatting.hs 49;" C +Con1 /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 30;" C +Con1 test/Formatting.hs 49;" C +Con1 test/TestBoilerplate.hs 30;" C +Con2 /home/bsherman/code/aeson-typescript/test/Formatting.hs 50;" C +Con2 /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 30;" C +Con2 test/Formatting.hs 50;" C +Con2 test/TestBoilerplate.hs 30;" C +D /home/bsherman/code/aeson-typescript/test/Formatting.hs 14;" t +D test/Formatting.hs 14;" t +D2 /home/bsherman/code/aeson-typescript/test/Formatting.hs 17;" t +D2 test/Formatting.hs 17;" t +DeployEnvironment /home/bsherman/code/aeson-typescript/test/ClosedTypeFamilies.hs 19;" F +DeployEnvironment /home/bsherman/code/aeson-typescript/test/OpenTypeFamilies.hs 19;" F +DeployEnvironment test/ClosedTypeFamilies.hs 19;" F +DeployEnvironment test/OpenTypeFamilies.hs 19;" F +DeployEnvironment2 /home/bsherman/code/aeson-typescript/test/ClosedTypeFamilies.hs 30;" F +DeployEnvironment2 /home/bsherman/code/aeson-typescript/test/OpenTypeFamilies.hs 30;" F +DeployEnvironment2 test/ClosedTypeFamilies.hs 30;" F +DeployEnvironment2 test/OpenTypeFamilies.hs 30;" F +DoubleHigherKind /home/bsherman/code/aeson-typescript/test/HigherKind.hs 24;" t +DoubleHigherKind test/HigherKind.hs 24;" t +Enum /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 133;" C +Enum src/Data/Aeson/TypeScript/Types.hs 133;" C +EnumWithType /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 134;" C +EnumWithType src/Data/Aeson/TypeScript/Types.hs 134;" C +ExportEach /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 125;" C +ExportEach src/Data/Aeson/TypeScript/Types.hs 125;" C +ExportMode /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 124;" t +ExportMode src/Data/Aeson/TypeScript/Types.hs 124;" t +ExportNone /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 127;" C +ExportNone src/Data/Aeson/TypeScript/Types.hs 127;" C +Exposed /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 70;" t +Exposed test/TestBoilerplate.hs 70;" t +ExtraConstraint /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 227;" C +ExtraConstraint src/Data/Aeson/TypeScript/Types.hs 227;" C +ExtraDecl /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 224;" C +ExtraDecl src/Data/Aeson/TypeScript/Types.hs 224;" C +ExtraDeclOrGenericInfo /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 224;" t +ExtraDeclOrGenericInfo src/Data/Aeson/TypeScript/Types.hs 224;" t +ExtraGeneric /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 225;" C +ExtraGeneric src/Data/Aeson/TypeScript/Types.hs 225;" C +ExtraParentType /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 228;" C +ExtraParentType src/Data/Aeson/TypeScript/Types.hs 228;" C +ExtraTopLevelDecs /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 226;" C +ExtraTopLevelDecs src/Data/Aeson/TypeScript/Types.hs 226;" C +ExtraTypeScriptOptions /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 203;" t +ExtraTypeScriptOptions src/Data/Aeson/TypeScript/Types.hs 203;" t +F /home/bsherman/code/aeson-typescript/test/Formatting.hs 14;" C +F test/Formatting.hs 14;" C +F2 /home/bsherman/code/aeson-typescript/test/Formatting.hs 17;" C +F2 test/Formatting.hs 17;" C +FancyFunctors /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 41;" t +FancyFunctors test/TestBoilerplate.hs 41;" t +Foo /home/bsherman/code/aeson-typescript/test/HigherKind.hs 20;" t +Foo test/HigherKind.hs 20;" t +Foo /home/bsherman/code/aeson-typescript/test/Formatting.hs 35;" C +Foo test/Formatting.hs 35;" C +FooBar /home/bsherman/code/aeson-typescript/test/Formatting.hs 34;" t +FooBar test/Formatting.hs 34;" t +Formatting /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Formatting.hs 3;" m +Formatting /home/bsherman/code/aeson-typescript/test/Formatting.hs 4;" m +Formatting src/Data/Aeson/TypeScript/Formatting.hs 3;" m +Formatting test/Formatting.hs 4;" m +FormattingOptions /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 111;" t +FormattingOptions src/Data/Aeson/TypeScript/Types.hs 111;" t +Generic /home/bsherman/code/aeson-typescript/test/Generic.hs 2;" m +Generic test/Generic.hs 2;" m +GenericInfo /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 231;" t +GenericInfo src/Data/Aeson/TypeScript/Types.hs 231;" t +GenericInfoExtra /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 234;" t +GenericInfoExtra src/Data/Aeson/TypeScript/Types.hs 234;" t +GetDoc /home/bsherman/code/aeson-typescript/test/GetDoc.hs 2;" m +GetDoc test/GetDoc.hs 2;" m +HasJSONOptions /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 165;" c +HasJSONOptions src/Data/Aeson/TypeScript/Types.hs 165;" c +HigherKind /home/bsherman/code/aeson-typescript/test/HigherKind.hs 16;" t +HigherKind test/HigherKind.hs 16;" t +HigherKind /home/bsherman/code/aeson-typescript/test/HigherKind.hs 2;" m +HigherKind test/HigherKind.hs 2;" m +HigherKindWithUnary /home/bsherman/code/aeson-typescript/test/HigherKind.hs 29;" t +HigherKindWithUnary test/HigherKind.hs 29;" t +Hybrid /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 29;" t +Hybrid test/TestBoilerplate.hs 29;" t +HybridRecord /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 29;" C +HybridRecord test/TestBoilerplate.hs 29;" C +HybridSimple /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 29;" C +HybridSimple test/TestBoilerplate.hs 29;" C +Instances /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Instances.hs 12;" m +Instances src/Data/Aeson/TypeScript/Instances.hs 12;" m +Internal /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Internal.hs 4;" m +Internal src/Data/Aeson/TypeScript/Internal.hs 4;" m +K8SDE /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 60;" t +K8SDE test/TestBoilerplate.hs 60;" t +K8SEnvironment /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 66;" t +K8SEnvironment test/TestBoilerplate.hs 66;" t +LegalName /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/LegalName.hs 4;" m +LegalName src/Data/Aeson/TypeScript/LegalName.hs 4;" m +LegalNameSpec /home/bsherman/code/aeson-typescript/test/LegalNameSpec.hs 2;" m +LegalNameSpec test/LegalNameSpec.hs 2;" m +Lookup /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Lookup.hs 7;" m +Lookup src/Data/Aeson/TypeScript/Lookup.hs 7;" m +Main /home/bsherman/code/aeson-typescript/test/Spec.hs 3;" m +Main test/Spec.hs 3;" m +NoOmitNothingFields /home/bsherman/code/aeson-typescript/test/NoOmitNothingFields.hs 2;" m +NoOmitNothingFields test/NoOmitNothingFields.hs 2;" m +NormalConstructors /home/bsherman/code/aeson-typescript/test/Formatting.hs 47;" t +NormalConstructors test/Formatting.hs 47;" t +NormalStar /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 234;" C +NormalStar src/Data/Aeson/TypeScript/Types.hs 234;" C +Nullable /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 69;" t +Nullable test/TestBoilerplate.hs 69;" t +Nullary /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 31;" C +Nullary test/TestBoilerplate.hs 31;" C +Numbers /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 34;" t +Numbers test/TestBoilerplate.hs 34;" t +ObjectWithSingleFieldNoTagSingleConstructors /home/bsherman/code/aeson-typescript/test/ObjectWithSingleFieldNoTagSingleConstructors.hs 2;" m +ObjectWithSingleFieldNoTagSingleConstructors test/ObjectWithSingleFieldNoTagSingleConstructors.hs 2;" m +ObjectWithSingleFieldTagSingleConstructors /home/bsherman/code/aeson-typescript/test/ObjectWithSingleFieldTagSingleConstructors.hs 2;" m +ObjectWithSingleFieldTagSingleConstructors test/ObjectWithSingleFieldTagSingleConstructors.hs 2;" m +OmitNothingFields /home/bsherman/code/aeson-typescript/test/OmitNothingFields.hs 2;" m +OmitNothingFields test/OmitNothingFields.hs 2;" m +OneField /home/bsherman/code/aeson-typescript/test/GetDoc.hs 14;" t +OneField /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 26;" t +OneField test/GetDoc.hs 14;" t +OneField test/TestBoilerplate.hs 26;" t +OneFieldRecordless /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 25;" t +OneFieldRecordless test/TestBoilerplate.hs 25;" t +OpenTypeFamilies /home/bsherman/code/aeson-typescript/test/OpenTypeFamilies.hs 4;" m +OpenTypeFamilies test/OpenTypeFamilies.hs 4;" m +Optional /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 32;" t +Optional test/TestBoilerplate.hs 32;" t +PrimeInConstr /home/bsherman/code/aeson-typescript/test/Formatting.hs 31;" t +PrimeInConstr test/Formatting.hs 31;" t +PrimeInConstr' /home/bsherman/code/aeson-typescript/test/Formatting.hs 31;" C +PrimeInConstr' test/Formatting.hs 31;" C +PrimeInType /home/bsherman/code/aeson-typescript/test/Formatting.hs 28;" C +PrimeInType test/Formatting.hs 28;" C +PrimeInType' /home/bsherman/code/aeson-typescript/test/Formatting.hs 28;" t +PrimeInType' test/Formatting.hs 28;" t +Product /home/bsherman/code/aeson-typescript/test/Generic.hs 16;" C +Product /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 31;" C +Product test/Generic.hs 16;" C +Product test/TestBoilerplate.hs 31;" C +Product2 /home/bsherman/code/aeson-typescript/test/Generic.hs 19;" C +Product2 test/Generic.hs 19;" C +Product3 /home/bsherman/code/aeson-typescript/test/Generic.hs 22;" C +Product3 test/Generic.hs 22;" C +Product4 /home/bsherman/code/aeson-typescript/test/Generic.hs 25;" C +Product4 test/Generic.hs 25;" C +Record /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 31;" C +Record test/TestBoilerplate.hs 31;" C +Recursive /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Recursive.hs 6;" m +Recursive src/Data/Aeson/TypeScript/Recursive.hs 6;" m +S /home/bsherman/code/aeson-typescript/test/Formatting.hs 14;" C +S test/Formatting.hs 14;" C +S2 /home/bsherman/code/aeson-typescript/test/Formatting.hs 17;" C +S2 test/Formatting.hs 17;" C +Simple /home/bsherman/code/aeson-typescript/test/ClosedTypeFamilies.hs 34;" t +Simple /home/bsherman/code/aeson-typescript/test/OpenTypeFamilies.hs 34;" t +Simple test/ClosedTypeFamilies.hs 34;" t +Simple test/OpenTypeFamilies.hs 34;" t +SingleDE /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 57;" t +SingleDE test/TestBoilerplate.hs 57;" t +SingleNodeEnvironment /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 63;" t +SingleNodeEnvironment test/TestBoilerplate.hs 63;" t +Suffix /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 26;" t +Suffix src/Data/Aeson/TypeScript/Util.hs 26;" t +SumTypeFormat /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 131;" t +SumTypeFormat src/Data/Aeson/TypeScript/Types.hs 131;" t +T /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 168;" t +T src/Data/Aeson/TypeScript/Types.hs 168;" t +T1 /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 169;" t +T1 src/Data/Aeson/TypeScript/Types.hs 169;" t +T10 /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 178;" t +T10 src/Data/Aeson/TypeScript/Types.hs 178;" t +T2 /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 170;" t +T2 src/Data/Aeson/TypeScript/Types.hs 170;" t +T3 /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 171;" t +T3 src/Data/Aeson/TypeScript/Types.hs 171;" t +T4 /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 172;" t +T4 src/Data/Aeson/TypeScript/Types.hs 172;" t +T5 /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 173;" t +T5 src/Data/Aeson/TypeScript/Types.hs 173;" t +T6 /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 174;" t +T6 src/Data/Aeson/TypeScript/Types.hs 174;" t +T7 /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 175;" t +T7 src/Data/Aeson/TypeScript/Types.hs 175;" t +T8 /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 176;" t +T8 src/Data/Aeson/TypeScript/Types.hs 176;" t +T9 /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 177;" t +T9 src/Data/Aeson/TypeScript/Types.hs 177;" t +TH /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/TH.hs 104;" m +TH src/Data/Aeson/TypeScript/TH.hs 104;" m +TSDeclaration /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 85;" t +TSDeclaration src/Data/Aeson/TypeScript/Types.hs 85;" t +TSField /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 96;" t +TSField src/Data/Aeson/TypeScript/Types.hs 96;" t +TSInterfaceDeclaration /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 85;" C +TSInterfaceDeclaration src/Data/Aeson/TypeScript/Types.hs 85;" C +TSRawDeclaration /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 93;" C +TSRawDeclaration src/Data/Aeson/TypeScript/Types.hs 93;" C +TSString /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 104;" t +TSString src/Data/Aeson/TypeScript/Types.hs 104;" t +TSType /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 74;" t +TSType src/Data/Aeson/TypeScript/Types.hs 74;" t +TSTypeAlternatives /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 89;" C +TSTypeAlternatives src/Data/Aeson/TypeScript/Types.hs 89;" C +TaggedObjectNoTagSingleConstructors /home/bsherman/code/aeson-typescript/test/TaggedObjectNoTagSingleConstructors.hs 2;" m +TaggedObjectNoTagSingleConstructors test/TaggedObjectNoTagSingleConstructors.hs 2;" m +TaggedObjectTagSingleConstructors /home/bsherman/code/aeson-typescript/test/TaggedObjectTagSingleConstructors.hs 2;" m +TaggedObjectTagSingleConstructors test/TaggedObjectTagSingleConstructors.hs 2;" m +TestBoilerplate /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 3;" m +TestBoilerplate test/TestBoilerplate.hs 3;" m +Transform /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Transform.hs 8;" m +Transform src/Data/Aeson/TypeScript/Transform.hs 8;" m +TwoConstructor /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 30;" t +TwoConstructor test/TestBoilerplate.hs 30;" t +TwoElemArrayNoTagSingleConstructors /home/bsherman/code/aeson-typescript/test/TwoElemArrayNoTagSingleConstructors.hs 2;" m +TwoElemArrayNoTagSingleConstructors test/TwoElemArrayNoTagSingleConstructors.hs 2;" m +TwoElemArrayTagSingleConstructors /home/bsherman/code/aeson-typescript/test/TwoElemArrayTagSingleConstructors.hs 2;" m +TwoElemArrayTagSingleConstructors test/TwoElemArrayTagSingleConstructors.hs 2;" m +TwoField /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 28;" t +TwoField test/TestBoilerplate.hs 28;" t +TwoFieldRecordless /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 27;" t +TwoFieldRecordless test/TestBoilerplate.hs 27;" t +TypeAlias /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 132;" C +TypeAlias src/Data/Aeson/TypeScript/Types.hs 132;" C +TypeFamilyKey /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 235;" C +TypeFamilyKey src/Data/Aeson/TypeScript/Types.hs 235;" C +TypeManipulation /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/TypeManipulation.hs 7;" m +TypeManipulation src/Data/Aeson/TypeScript/TypeManipulation.hs 7;" m +TypeScript /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 49;" c +TypeScript src/Data/Aeson/TypeScript/Types.hs 49;" c +Types /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 6;" m +Types src/Data/Aeson/TypeScript/Types.hs 6;" m +U /home/bsherman/code/aeson-typescript/test/Formatting.hs 21;" C +U test/Formatting.hs 21;" C +UTagSingle /home/bsherman/code/aeson-typescript/test/Formatting.hs 25;" C +UTagSingle test/Formatting.hs 25;" C +Unary /home/bsherman/code/aeson-typescript/test/Generic.hs 16;" C +Unary /home/bsherman/code/aeson-typescript/test/HigherKind.hs 29;" C +Unary /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 31;" C +Unary test/Generic.hs 16;" C +Unary test/HigherKind.hs 29;" C +Unary test/TestBoilerplate.hs 31;" C +Unit /home/bsherman/code/aeson-typescript/test/Formatting.hs 21;" t +Unit /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 24;" t +Unit test/Formatting.hs 21;" t +Unit test/TestBoilerplate.hs 24;" t +Unit1 /home/bsherman/code/aeson-typescript/test/Basic.hs 13;" t +Unit1 test/Basic.hs 13;" t +Unit2 /home/bsherman/code/aeson-typescript/test/Basic.hs 16;" t +Unit2 test/Basic.hs 16;" t +UnitTagSingle /home/bsherman/code/aeson-typescript/test/Formatting.hs 25;" t +UnitTagSingle test/Formatting.hs 25;" t +UntaggedNoTagSingleConstructors /home/bsherman/code/aeson-typescript/test/UntaggedNoTagSingleConstructors.hs 3;" m +UntaggedNoTagSingleConstructors test/UntaggedNoTagSingleConstructors.hs 3;" m +UntaggedTagSingleConstructors /home/bsherman/code/aeson-typescript/test/UntaggedTagSingleConstructors.hs 3;" m +UntaggedTagSingleConstructors test/UntaggedTagSingleConstructors.hs 3;" m +UnwrapUnaryRecords /home/bsherman/code/aeson-typescript/test/UnwrapUnaryRecords.hs 3;" m +UnwrapUnaryRecords test/UnwrapUnaryRecords.hs 3;" m +User /home/bsherman/code/aeson-typescript/test/ClosedTypeFamilies.hs 23;" C +User /home/bsherman/code/aeson-typescript/test/OpenTypeFamilies.hs 23;" C +User test/ClosedTypeFamilies.hs 23;" C +User test/OpenTypeFamilies.hs 23;" C +UserT /home/bsherman/code/aeson-typescript/test/ClosedTypeFamilies.hs 23;" t +UserT /home/bsherman/code/aeson-typescript/test/OpenTypeFamilies.hs 23;" t +UserT test/ClosedTypeFamilies.hs 23;" t +UserT test/OpenTypeFamilies.hs 23;" t +Util /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 7;" m +Util /home/bsherman/code/aeson-typescript/test/Util.hs 3;" m +Util src/Data/Aeson/TypeScript/Util.hs 7;" m +Util test/Util.hs 3;" m +Var /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 27;" t +Var src/Data/Aeson/TypeScript/Util.hs 27;" t +_userCreatedAt /home/bsherman/code/aeson-typescript/test/ClosedTypeFamilies.hs 25;" f +_userCreatedAt /home/bsherman/code/aeson-typescript/test/OpenTypeFamilies.hs 25;" f +_userCreatedAt test/ClosedTypeFamilies.hs 25;" f +_userCreatedAt test/OpenTypeFamilies.hs 25;" f +_userDeployEnvironment /home/bsherman/code/aeson-typescript/test/ClosedTypeFamilies.hs 26;" f +_userDeployEnvironment /home/bsherman/code/aeson-typescript/test/OpenTypeFamilies.hs 26;" f +_userDeployEnvironment test/ClosedTypeFamilies.hs 26;" f +_userDeployEnvironment test/OpenTypeFamilies.hs 26;" f +_userUsername /home/bsherman/code/aeson-typescript/test/ClosedTypeFamilies.hs 24;" f +_userUsername /home/bsherman/code/aeson-typescript/test/OpenTypeFamilies.hs 24;" f +_userUsername test/ClosedTypeFamilies.hs 24;" f +_userUsername test/OpenTypeFamilies.hs 24;" f +aesonFromList /home/bsherman/code/aeson-typescript/test/Util/Aeson.hs 9;" f +aesonFromList test/Util/Aeson.hs 9;" f +aesonObject /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 33;" f +aesonObject test/TestBoilerplate.hs 33;" f +aesonValue /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 33;" f +aesonValue test/TestBoilerplate.hs 33;" f +allConstructorsAreNullary /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 64;" f +allConstructorsAreNullary src/Data/Aeson/TypeScript/Util.hs 64;" f +allStarConstructors /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 192;" f +allStarConstructors src/Data/Aeson/TypeScript/Types.hs 192;" f +allStarConstructors' /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 195;" f +allStarConstructors' src/Data/Aeson/TypeScript/Types.hs 195;" f +allStarConstructors'' /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 198;" f +allStarConstructors'' src/Data/Aeson/TypeScript/Types.hs 198;" f +allTests /home/bsherman/code/aeson-typescript/test/NoOmitNothingFields.hs 13;" f +allTests /home/bsherman/code/aeson-typescript/test/UnwrapUnaryRecords.hs 16;" f +allTests test/NoOmitNothingFields.hs 13;" f +allTests test/UnwrapUnaryRecords.hs 16;" f +alternativeTypes /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 91;" f +alternativeTypes src/Data/Aeson/TypeScript/Types.hs 91;" f +applyToArgsE /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 91;" f +applyToArgsE src/Data/Aeson/TypeScript/Util.hs 91;" f +applyToArgsT /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 86;" f +applyToArgsT src/Data/Aeson/TypeScript/Util.hs 86;" f +assertExtensionsTurnedOn /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 104;" f +assertExtensionsTurnedOn src/Data/Aeson/TypeScript/Util.hs 104;" f +barInt /home/bsherman/code/aeson-typescript/test/Formatting.hs 43;" f +barInt test/Formatting.hs 43;" f +checkIllegalNameChars /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/LegalName.hs 14;" f +checkIllegalNameChars src/Data/Aeson/TypeScript/LegalName.hs 14;" f +chooseInstallScript /home/bsherman/code/aeson-typescript/test/Util.hs 107;" f +chooseInstallScript test/Util.hs 107;" f +compose /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 45;" f +compose test/TestBoilerplate.hs 45;" f +con1String /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 30;" f +con1String test/TestBoilerplate.hs 30;" f +con2Int /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 30;" f +con2Int test/TestBoilerplate.hs 30;" f +con2String /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 30;" f +con2String test/TestBoilerplate.hs 30;" f +const /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 43;" f +const test/TestBoilerplate.hs 43;" f +constructorNameToUse /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 153;" f +constructorNameToUse src/Data/Aeson/TypeScript/Util.hs 153;" f +contentsTupleType /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 157;" f +contentsTupleType src/Data/Aeson/TypeScript/Util.hs 157;" f +contentsTupleTypeSubstituted /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 164;" f +contentsTupleTypeSubstituted src/Data/Aeson/TypeScript/Util.hs 164;" f +coveredByDataTypeVars /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 36;" f +coveredByDataTypeVars src/Data/Aeson/TypeScript/Util.hs 36;" f +defaultExtraTypeScriptOptions /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 213;" f +defaultExtraTypeScriptOptions src/Data/Aeson/TypeScript/Types.hs 213;" f +defaultFormattingOptions /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 137;" f +defaultFormattingOptions src/Data/Aeson/TypeScript/Types.hs 137;" f +defaultNameFormatter /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 149;" f +defaultNameFormatter src/Data/Aeson/TypeScript/Types.hs 149;" f +deriveInstanceIfNecessary /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Recursive.hs 67;" f +deriveInstanceIfNecessary src/Data/Aeson/TypeScript/Recursive.hs 67;" f +deriveJSONAndTypeScript /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/TH.hs 341;" f +deriveJSONAndTypeScript src/Data/Aeson/TypeScript/TH.hs 341;" f +deriveJSONAndTypeScript' /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/TH.hs 348;" f +deriveJSONAndTypeScript' src/Data/Aeson/TypeScript/TH.hs 348;" f +deriveTypeScript /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/TH.hs 358;" f +deriveTypeScript src/Data/Aeson/TypeScript/TH.hs 358;" f +deriveTypeScript' /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/TH.hs 175;" f +deriveTypeScript' src/Data/Aeson/TypeScript/TH.hs 175;" f +deriveTypeScriptLookupType /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Lookup.hs 21;" f +deriveTypeScriptLookupType src/Data/Aeson/TypeScript/Lookup.hs 21;" f +doesTypeScriptInstanceExist /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Recursive.hs 76;" f +doesTypeScriptInstanceExist src/Data/Aeson/TypeScript/Recursive.hs 76;" f +doubleInt /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 28;" f +doubleInt test/TestBoilerplate.hs 28;" f +doubleString /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 28;" f +doubleString test/TestBoilerplate.hs 28;" f +dropLeadingIFromInterfaceName /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 50;" f +dropLeadingIFromInterfaceName src/Data/Aeson/TypeScript/Util.hs 50;" f +ensureTSCExists /home/bsherman/code/aeson-typescript/test/Util.hs 88;" f +ensureTSCExists test/Util.hs 88;" f +exportMode /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 118;" f +exportMode src/Data/Aeson/TypeScript/Types.hs 118;" f +exportPrefix /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Formatting.hs 71;" f +exportPrefix src/Data/Aeson/TypeScript/Formatting.hs 71;" f +fancyFunctorsValue /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 50;" f +fancyFunctorsValue test/TestBoilerplate.hs 50;" f +fieldDoc /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 100;" f +fieldDoc src/Data/Aeson/TypeScript/Types.hs 100;" f +fieldName /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 98;" f +fieldName src/Data/Aeson/TypeScript/Types.hs 98;" f +fieldOptional /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 97;" f +fieldOptional src/Data/Aeson/TypeScript/Types.hs 97;" f +fieldType /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 99;" f +fieldType src/Data/Aeson/TypeScript/Types.hs 99;" f +fooHigherKindReference /home/bsherman/code/aeson-typescript/test/HigherKind.hs 21;" f +fooHigherKindReference test/HigherKind.hs 21;" f +fooString /home/bsherman/code/aeson-typescript/test/HigherKind.hs 20;" f +fooString test/HigherKind.hs 20;" f +formatTSDeclaration /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Formatting.hs 23;" f +formatTSDeclaration src/Data/Aeson/TypeScript/Formatting.hs 23;" f +formatTSDeclarations /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Formatting.hs 19;" f +formatTSDeclarations src/Data/Aeson/TypeScript/Formatting.hs 19;" f +formatTSDeclarations' /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Formatting.hs 76;" f +formatTSDeclarations' src/Data/Aeson/TypeScript/Formatting.hs 76;" f +genericVariablesListExpr /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 209;" f +genericVariablesListExpr src/Data/Aeson/TypeScript/Util.hs 209;" f +getAllParentTypes /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Recursive.hs 88;" f +getAllParentTypes src/Data/Aeson/TypeScript/Recursive.hs 88;" f +getBracketsExpression /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 200;" f +getBracketsExpression src/Data/Aeson/TypeScript/Util.hs 200;" f +getBracketsExpressionAllTypesNoSuffix /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 205;" f +getBracketsExpressionAllTypesNoSuffix src/Data/Aeson/TypeScript/Util.hs 205;" f +getClosedTypeFamilyImage /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Lookup.hs 51;" f +getClosedTypeFamilyImage src/Data/Aeson/TypeScript/Lookup.hs 51;" f +getClosedTypeFamilyInterfaceDecl /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Lookup.hs 35;" f +getClosedTypeFamilyInterfaceDecl src/Data/Aeson/TypeScript/Lookup.hs 35;" f +getDataTypeVars /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 29;" f +getDataTypeVars src/Data/Aeson/TypeScript/Util.hs 29;" f +getDatatypePredicate /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 72;" f +getDatatypePredicate src/Data/Aeson/TypeScript/Util.hs 72;" f +getGenericBrackets /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Formatting.hs 108;" f +getGenericBrackets src/Data/Aeson/TypeScript/Formatting.hs 108;" f +getJSONOptions /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 166;" f +getJSONOptions src/Data/Aeson/TypeScript/Types.hs 166;" f +getOptionalAsBoolExp /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 82;" f +getOptionalAsBoolExp src/Data/Aeson/TypeScript/Util.hs 82;" f +getParentTypes /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 65;" f +getParentTypes src/Data/Aeson/TypeScript/Types.hs 65;" f +getTSC /home/bsherman/code/aeson-typescript/test/Util.hs 28;" f +getTSC test/Util.hs 28;" f +getTSFile /home/bsherman/code/aeson-typescript/test/Util.hs 55;" f +getTSFile test/Util.hs 55;" f +getTagSingleConstructors /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 96;" f +getTagSingleConstructors src/Data/Aeson/TypeScript/Util.hs 96;" f +getTransitiveClosure /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Recursive.hs 38;" f +getTransitiveClosure src/Data/Aeson/TypeScript/Recursive.hs 38;" f +getTypeAsStringExp /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 79;" f +getTypeAsStringExp src/Data/Aeson/TypeScript/Util.hs 79;" f +getTypeName /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 61;" f +getTypeName src/Data/Aeson/TypeScript/Util.hs 61;" f +getTypeScriptDeclarations /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 50;" f +getTypeScriptDeclarations src/Data/Aeson/TypeScript/Types.hs 50;" f +getTypeScriptDeclarationsRecursively /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Recursive.hs 48;" f +getTypeScriptDeclarationsRecursively src/Data/Aeson/TypeScript/Recursive.hs 48;" f +getTypeScriptKeyType /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 57;" f +getTypeScriptKeyType src/Data/Aeson/TypeScript/Types.hs 57;" f +getTypeScriptOptional /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 61;" f +getTypeScriptOptional src/Data/Aeson/TypeScript/Types.hs 61;" f +getTypeScriptType /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 54;" f +getTypeScriptType src/Data/Aeson/TypeScript/Types.hs 54;" f +haddockModifier /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 210;" f +haddockModifier src/Data/Aeson/TypeScript/Types.hs 210;" f +handleConstructor /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/TH.hs 246;" f +handleConstructor src/Data/Aeson/TypeScript/TH.hs 246;" f +hasFreeTypeVariable /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/TypeManipulation.hs 45;" f +hasFreeTypeVariable src/Data/Aeson/TypeScript/TypeManipulation.hs 45;" f +higherKindList /home/bsherman/code/aeson-typescript/test/HigherKind.hs 16;" f +higherKindList test/HigherKind.hs 16;" f +higherKindThing /home/bsherman/code/aeson-typescript/test/HigherKind.hs 25;" f +higherKindThing test/HigherKind.hs 25;" f +hybridString /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 29;" f +hybridString test/TestBoilerplate.hs 29;" f +indentTo /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Formatting.hs 66;" f +indentTo src/Data/Aeson/TypeScript/Formatting.hs 66;" f +interfaceDoc /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 88;" f +interfaceDoc src/Data/Aeson/TypeScript/Types.hs 88;" f +interfaceGenericVariables /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 86;" f +interfaceGenericVariables src/Data/Aeson/TypeScript/Types.hs 86;" f +interfaceMembers /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 87;" f +interfaceMembers src/Data/Aeson/TypeScript/Types.hs 87;" f +interfaceName /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 85;" f +interfaceName src/Data/Aeson/TypeScript/Types.hs 85;" f +interfaceNameModifier /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 114;" f +interfaceNameModifier src/Data/Aeson/TypeScript/Types.hs 114;" f +isCI /home/bsherman/code/aeson-typescript/test/Util.hs 25;" f +isCI test/Util.hs 25;" f +isConstructorNullary /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 67;" f +isConstructorNullary src/Data/Aeson/TypeScript/Util.hs 67;" f +isGenericVariable /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 69;" f +isGenericVariable src/Data/Aeson/TypeScript/Types.hs 69;" f +isNoEmitTypeScriptDeclaration /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Formatting.hs 121;" f +isNoEmitTypeScriptDeclaration src/Data/Aeson/TypeScript/Formatting.hs 121;" f +isNoEmitTypeScriptField /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Formatting.hs 117;" f +isNoEmitTypeScriptField src/Data/Aeson/TypeScript/Formatting.hs 117;" f +isObjectWithSingleField /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 119;" f +isObjectWithSingleField src/Data/Aeson/TypeScript/Util.hs 119;" f +isStarType /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 217;" f +isStarType src/Data/Aeson/TypeScript/Util.hs 217;" f +isTwoElemArray /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 124;" f +isTwoElemArray src/Data/Aeson/TypeScript/Util.hs 124;" f +isUntaggedValue /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 130;" f +isUntaggedValue src/Data/Aeson/TypeScript/Util.hs 130;" f +keyType /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 206;" f +keyType src/Data/Aeson/TypeScript/Types.hs 206;" f +lastNameComponent /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 55;" f +lastNameComponent src/Data/Aeson/TypeScript/Util.hs 55;" f +lastNameComponent' /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 58;" f +lastNameComponent' src/Data/Aeson/TypeScript/Util.hs 58;" f +localTSC /home/bsherman/code/aeson-typescript/test/Util.hs 20;" f +localTSC test/Util.hs 20;" f +main /home/bsherman/code/aeson-typescript/Setup.hs 2;" f +main /home/bsherman/code/aeson-typescript/test/Basic.hs 35;" f +main /home/bsherman/code/aeson-typescript/test/ClosedTypeFamilies.hs 77;" f +main /home/bsherman/code/aeson-typescript/test/Formatting.hs 109;" f +main /home/bsherman/code/aeson-typescript/test/Generic.hs 60;" f +main /home/bsherman/code/aeson-typescript/test/GetDoc.hs 32;" f +main /home/bsherman/code/aeson-typescript/test/HigherKind.hs 89;" f +main /home/bsherman/code/aeson-typescript/test/ObjectWithSingleFieldNoTagSingleConstructors.hs 10;" f +main /home/bsherman/code/aeson-typescript/test/ObjectWithSingleFieldTagSingleConstructors.hs 11;" f +main /home/bsherman/code/aeson-typescript/test/OmitNothingFields.hs 13;" f +main /home/bsherman/code/aeson-typescript/test/OpenTypeFamilies.hs 77;" f +main /home/bsherman/code/aeson-typescript/test/Spec.hs 28;" f +main /home/bsherman/code/aeson-typescript/test/TaggedObjectNoTagSingleConstructors.hs 10;" f +main /home/bsherman/code/aeson-typescript/test/TaggedObjectTagSingleConstructors.hs 11;" f +main /home/bsherman/code/aeson-typescript/test/TwoElemArrayNoTagSingleConstructors.hs 10;" f +main /home/bsherman/code/aeson-typescript/test/TwoElemArrayTagSingleConstructors.hs 11;" f +main /home/bsherman/code/aeson-typescript/test/UntaggedNoTagSingleConstructors.hs 17;" f +main /home/bsherman/code/aeson-typescript/test/UntaggedTagSingleConstructors.hs 19;" f +main /home/bsherman/code/aeson-typescript/test/UnwrapUnaryRecords.hs 34;" f +main Setup.hs 2;" f +main test/Basic.hs 35;" f +main test/ClosedTypeFamilies.hs 77;" f +main test/Formatting.hs 109;" f +main test/Generic.hs 60;" f +main test/GetDoc.hs 32;" f +main test/HigherKind.hs 89;" f +main test/ObjectWithSingleFieldNoTagSingleConstructors.hs 10;" f +main test/ObjectWithSingleFieldTagSingleConstructors.hs 11;" f +main test/OmitNothingFields.hs 13;" f +main test/OpenTypeFamilies.hs 77;" f +main test/Spec.hs 28;" f +main test/TaggedObjectNoTagSingleConstructors.hs 10;" f +main test/TaggedObjectTagSingleConstructors.hs 11;" f +main test/TwoElemArrayNoTagSingleConstructors.hs 10;" f +main test/TwoElemArrayTagSingleConstructors.hs 11;" f +main test/UntaggedNoTagSingleConstructors.hs 17;" f +main test/UntaggedTagSingleConstructors.hs 19;" f +main test/UnwrapUnaryRecords.hs 34;" f +main' /home/bsherman/code/aeson-typescript/test/HigherKind.hs 92;" f +main' test/HigherKind.hs 92;" f +makeDocPrefix /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Formatting.hs 99;" f +makeDocPrefix src/Data/Aeson/TypeScript/Formatting.hs 99;" f +mapType /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 171;" f +mapType src/Data/Aeson/TypeScript/Util.hs 171;" f +mkInstance /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 137;" f +mkInstance src/Data/Aeson/TypeScript/Util.hs 137;" f +namesAndTypes /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 144;" f +namesAndTypes src/Data/Aeson/TypeScript/Util.hs 144;" f +natural /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 35;" f +natural test/TestBoilerplate.hs 35;" f +noEmitTypeScriptAnnotation /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Formatting.hs 114;" f +noEmitTypeScriptAnnotation src/Data/Aeson/TypeScript/Formatting.hs 114;" f +nonEmpty /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 42;" f +nonEmpty test/TestBoilerplate.hs 42;" f +nothingOnFail /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 221;" f +nothingOnFail src/Data/Aeson/TypeScript/Util.hs 221;" f +npmInstallScript /home/bsherman/code/aeson-typescript/test/Util.hs 20;" f +npmInstallScript test/Util.hs 20;" f +numIndentSpaces /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 112;" f +numIndentSpaces src/Data/Aeson/TypeScript/Types.hs 112;" f +optionalInt /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 32;" f +optionalInt test/TestBoilerplate.hs 32;" f +product /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 44;" f +product test/TestBoilerplate.hs 44;" f +record3 /home/bsherman/code/aeson-typescript/test/Generic.hs 22;" f +record3 test/Generic.hs 22;" f +record4 /home/bsherman/code/aeson-typescript/test/Generic.hs 25;" f +record4 test/Generic.hs 25;" f +recordInt /home/bsherman/code/aeson-typescript/test/Formatting.hs 38;" f +recordInt test/Formatting.hs 38;" f +recordString /home/bsherman/code/aeson-typescript/test/Formatting.hs 37;" f +recordString test/Formatting.hs 37;" f +recursivelyDeriveMissingInstancesFor /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Recursive.hs 60;" f +recursivelyDeriveMissingInstancesFor src/Data/Aeson/TypeScript/Recursive.hs 60;" f +recursivelyDeriveMissingTypeScriptInstancesFor /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Recursive.hs 57;" f +recursivelyDeriveMissingTypeScriptInstancesFor src/Data/Aeson/TypeScript/Recursive.hs 57;" f +searchForConstraints /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/TypeManipulation.hs 23;" f +searchForConstraints src/Data/Aeson/TypeScript/TypeManipulation.hs 23;" f +setDataTypeVars /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 43;" f +setDataTypeVars src/Data/Aeson/TypeScript/Util.hs 43;" f +setTagSingleConstructors /home/bsherman/code/aeson-typescript/test/Util.hs 100;" f +setTagSingleConstructors test/Util.hs 100;" f +simpleString /home/bsherman/code/aeson-typescript/test/GetDoc.hs 18;" f +simpleString /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 26;" f +simpleString test/GetDoc.hs 18;" f +simpleString test/TestBoilerplate.hs 26;" f +someList /home/bsherman/code/aeson-typescript/test/HigherKind.hs 24;" f +someList test/HigherKind.hs 24;" f +testDeclarations /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 79;" f +testDeclarations test/TestBoilerplate.hs 79;" f +testOne /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 31;" f +testOne test/TestBoilerplate.hs 31;" f +testThree /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 31;" f +testThree test/TestBoilerplate.hs 31;" f +testTwo /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 31;" f +testTwo test/TestBoilerplate.hs 31;" f +testTypeCheck /home/bsherman/code/aeson-typescript/test/Util.hs 36;" f +testTypeCheck test/Util.hs 36;" f +testTypeCheckDeclarations /home/bsherman/code/aeson-typescript/test/Util.hs 64;" f +testTypeCheckDeclarations test/Util.hs 64;" f +tests /home/bsherman/code/aeson-typescript/test/Basic.hs 20;" f +tests /home/bsherman/code/aeson-typescript/test/ClosedTypeFamilies.hs 37;" f +tests /home/bsherman/code/aeson-typescript/test/Formatting.hs 53;" f +tests /home/bsherman/code/aeson-typescript/test/Generic.hs 28;" f +tests /home/bsherman/code/aeson-typescript/test/GetDoc.hs 22;" f +tests /home/bsherman/code/aeson-typescript/test/HigherKind.hs 34;" f +tests /home/bsherman/code/aeson-typescript/test/LegalNameSpec.hs 8;" f +tests /home/bsherman/code/aeson-typescript/test/OpenTypeFamilies.hs 37;" f +tests /home/bsherman/code/aeson-typescript/test/UntaggedNoTagSingleConstructors.hs 14;" f +tests /home/bsherman/code/aeson-typescript/test/UntaggedTagSingleConstructors.hs 15;" f +tests /home/bsherman/code/aeson-typescript/test/UnwrapUnaryRecords.hs 28;" f +tests test/Basic.hs 20;" f +tests test/ClosedTypeFamilies.hs 37;" f +tests test/Formatting.hs 53;" f +tests test/Generic.hs 28;" f +tests test/GetDoc.hs 22;" f +tests test/HigherKind.hs 34;" f +tests test/LegalNameSpec.hs 8;" f +tests test/OpenTypeFamilies.hs 37;" f +tests test/UntaggedNoTagSingleConstructors.hs 14;" f +tests test/UntaggedTagSingleConstructors.hs 15;" f +tests test/UnwrapUnaryRecords.hs 28;" f +text /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 93;" f +text src/Data/Aeson/TypeScript/Types.hs 93;" f +transformTypeFamilies /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Transform.hs 29;" f +transformTypeFamilies src/Data/Aeson/TypeScript/Transform.hs 29;" f +tryGetDoc /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 224;" f +tryGetDoc src/Data/Aeson/TypeScript/Util.hs 224;" f +tryPromote /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Util.hs 186;" f +tryPromote src/Data/Aeson/TypeScript/Util.hs 186;" f +typeAlternativesFormat /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 120;" f +typeAlternativesFormat src/Data/Aeson/TypeScript/Types.hs 120;" f +typeDoc /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 92;" f +typeDoc src/Data/Aeson/TypeScript/Types.hs 92;" f +typeFamiliesToMapToTypeScript /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 204;" f +typeFamiliesToMapToTypeScript src/Data/Aeson/TypeScript/Types.hs 204;" f +typeGenericVariables /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 90;" f +typeGenericVariables src/Data/Aeson/TypeScript/Types.hs 90;" f +typeName /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 89;" f +typeName src/Data/Aeson/TypeScript/Types.hs 89;" f +typeNameModifier /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 116;" f +typeNameModifier src/Data/Aeson/TypeScript/Types.hs 116;" f +unTSType /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 74;" f +unTSType src/Data/Aeson/TypeScript/Types.hs 74;" f +unifyGenericVariable /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/TypeManipulation.hs 58;" f +unifyGenericVariable src/Data/Aeson/TypeScript/TypeManipulation.hs 58;" f +unpackTSString /home/bsherman/code/aeson-typescript/src/Data/Aeson/TypeScript/Types.hs 104;" f +unpackTSString src/Data/Aeson/TypeScript/Types.hs 104;" f +word /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 36;" f +word test/TestBoilerplate.hs 36;" f +word16 /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 37;" f +word16 test/TestBoilerplate.hs 37;" f +word32 /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 38;" f +word32 test/TestBoilerplate.hs 38;" f +word64 /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 39;" f +word64 test/TestBoilerplate.hs 39;" f +writeM /home/bsherman/code/aeson-typescript/test/TestBoilerplate.hs 152;" f +writeM test/TestBoilerplate.hs 152;" f +yarnInstallScript /home/bsherman/code/aeson-typescript/test/Util.hs 20;" f +yarnInstallScript test/Util.hs 20;" f