From 0d7c9651b0ebba980787d020dc8a9fa357172f9b Mon Sep 17 00:00:00 2001 From: VegOwOtenks Date: Thu, 21 Aug 2025 20:19:15 +0200 Subject: [PATCH] feat: Dump somewhat readable --- app/Main.hs | 40 +++++++++++++++++++++++++++++++++++---- src/Language/Json/Type.hs | 2 +- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/app/Main.hs b/app/Main.hs index f380007..b2f7bce 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -1,9 +1,41 @@ +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE DerivingVia #-} module Main (main) where -import qualified Data.Text as Text -import qualified Data.Text.IO as TextIO -import qualified Language.Json as Json +-- meta +import GHC.Generics (Generic, Generically(..)) + +-- containers +import Data.Text (Text) + +-- classes +import Control.Monad ((<$!>)) +import Pretty.Serialize (serialize, PrettySerialize) + +-- json import Language.Json.Parser (runParser) +import qualified Language.Json as Json +import qualified Language.Json.Type as Json + +-- io +import qualified Data.Text.IO as TextIO +import qualified Data.Text.Lazy.IO as LazyTextIO + +data JsonInfo = JsonInfo + { json :: Json.Value + , inferredType :: Json.Type + } + deriving stock (Generic) + deriving PrettySerialize via Generically JsonInfo + main :: IO () -main = TextIO.interact (Text.pack . show . runParser Json.document) +main = do + info <- mkJsonInfo <$!> TextIO.getContents + LazyTextIO.putStrLn . serialize $ info + +mkJsonInfo :: Text -> Maybe JsonInfo +mkJsonInfo input = do + (_, value) <- runParser Json.document input + pure $ JsonInfo {json=value, inferredType=Json.infer value} + diff --git a/src/Language/Json/Type.hs b/src/Language/Json/Type.hs index e32a19a..672d4bf 100644 --- a/src/Language/Json/Type.hs +++ b/src/Language/Json/Type.hs @@ -2,7 +2,7 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE DerivingVia #-} {-# LANGUAGE DeriveGeneric #-} -module Language.Json.Type (infer) where +module Language.Json.Type (infer, Type(..)) where import Data.Map.Strict (Map) import Data.Text (Text) import Data.Set (Set)