From e5a04f372ba74d0de407cd48e2871897c4827369 Mon Sep 17 00:00:00 2001 From: Mark Probst Date: Mon, 20 Jul 2026 17:10:07 -0400 Subject: [PATCH] fix(haskell): render any-type as Aeson Value instead of Maybe Text (#2005) Co-Authored-By: gpt-5.6-sol via pi --- .../src/language/Haskell/HaskellRenderer.ts | 2 +- test/inputs/schema/any.1.json | 9 ++++++++- test/inputs/schema/any.2.json | 8 +++++++- test/inputs/schema/any.3.json | 7 ++++++- test/inputs/schema/any.schema | 8 ++++++-- test/languages.ts | 1 - 6 files changed, 28 insertions(+), 7 deletions(-) diff --git a/packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts b/packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts index df24ab19ef..7d52f19ca0 100644 --- a/packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts +++ b/packages/quicktype-core/src/language/Haskell/HaskellRenderer.ts @@ -109,7 +109,7 @@ export class HaskellRenderer extends ConvenienceRenderer { private haskellType(t: Type, noOptional = false): MultiWord { return matchType( t, - (_anyType) => multiWord(" ", "Maybe", "Text"), + (_anyType) => singleWord("Value"), (_nullType) => multiWord(" ", "Maybe", "Text"), (_boolType) => singleWord("Bool"), (_integerType) => singleWord("Int"), diff --git a/test/inputs/schema/any.1.json b/test/inputs/schema/any.1.json index 6465e11c40..697eb545b5 100644 --- a/test/inputs/schema/any.1.json +++ b/test/inputs/schema/any.1.json @@ -1 +1,8 @@ -{ "foo": 123 } +{ + "foo": 123, + "values": { + "number": 42, + "object": { "a": 1 }, + "array": [1, 2, 3] + } +} diff --git a/test/inputs/schema/any.2.json b/test/inputs/schema/any.2.json index 2ff04ea90e..5a35b97628 100644 --- a/test/inputs/schema/any.2.json +++ b/test/inputs/schema/any.2.json @@ -1 +1,7 @@ -{ "foo": [1, 2, 3] } +{ + "foo": [1, 2, 3], + "values": { + "boolean": true, + "null": null + } +} diff --git a/test/inputs/schema/any.3.json b/test/inputs/schema/any.3.json index fefd2e6dea..9fb43de4a2 100644 --- a/test/inputs/schema/any.3.json +++ b/test/inputs/schema/any.3.json @@ -1 +1,6 @@ -{ "foo": { "bar": "abc" } } +{ + "foo": { "bar": "abc" }, + "values": { + "string": "text" + } +} diff --git a/test/inputs/schema/any.schema b/test/inputs/schema/any.schema index a7067ed754..166aa4aaf2 100644 --- a/test/inputs/schema/any.schema +++ b/test/inputs/schema/any.schema @@ -1,7 +1,11 @@ { "type": "object", "properties": { - "foo": {} + "foo": {}, + "values": { + "type": "object", + "additionalProperties": true + } }, - "required": ["foo"] + "required": ["foo", "values"] } diff --git a/test/languages.ts b/test/languages.ts index 6bcfd43611..67d5b9bb82 100644 --- a/test/languages.ts +++ b/test/languages.ts @@ -1756,7 +1756,6 @@ export const HaskellLanguage: Language = { ], skipMiscJSON: false, skipSchema: [ - "any.schema", ...skipsUntypedUnions, // The test driver encodes the Maybe result, so a failed decode prints // "null" and exits 0 — expected-failure samples cannot be detected.