41 lines
946 B
Haskell
41 lines
946 B
Haskell
{-# 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}
|
|
|