hon/app/Main.hs

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}