{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DerivingVia #-} module Main (main) where -- 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 = 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}