Skip to content

Instantly share code, notes, and snippets.

@fragamus
Created September 13, 2018 05:04
Show Gist options
  • Save fragamus/1662aadf0929a9f9df97c1be9aaa8df4 to your computer and use it in GitHub Desktop.
Save fragamus/1662aadf0929a9f9df97c1be9aaa8df4 to your computer and use it in GitHub Desktop.
deriving FromJSON and ToJSON for Literal
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
import Data.Aeson
import Data.Text
import Control.Applicative
import Control.Monad
import qualified Data.ByteString.Lazy as B
import Network.HTTP.Conduit (simpleHttp)
import GHC.Generics
import System.Environment
import Language.Haskell.Exts
import Language.Haskell.Exts.Pretty
deriving instance Generic Literal l
deriving instance ToJSON Literal l
deriving instance FromJSON Literal l
deriving instance Generic SrcSpanInfo
deriving instance ToJSON SrcSpanInfo
deriving instance FromJSON SrcSpanInfo
deriving instance Generic SrcSpan
deriving instance ToJSON SrcSpan
deriving instance FromJSON SrcSpan
main = do
let ind l n = if Prelude.length l > n then Just $ l !! n else Nothing
args <- getArgs
let file = ind args 0
let inp = maybe getContents readFile file
fileContents <- inp
putStrLn fileContents
let ast = fromParseResult $ parseFileContents fileContents
putStrLn "ast:"
putStrLn $ show $ ast
let original = SrcSpanInfo {srcInfoSpan = SrcSpan "<unknown>.hs" 1 1 4 1, srcInfoPoints = [SrcSpan "<unknown>.hs" 1 1 1 1,SrcSpan "<unknown>.hs" 2 1 2 1,SrcSpan "<unknown>.hs" 2 1 2 1,SrcSpan "<unknown>.hs" 2 1 2 1,SrcSpan "<unknown>.hs" 4 1 4 1,SrcSpan "<unknown>.hs" 4 1 4 1]}
--let original = SrcSpan "<unknown>.hs" 1 1 4 1
putStrLn "original:"
putStrLn $ show original
let encoded = encode original
putStrLn "encoded:"
print encoded
let eitherDecodedOrString = eitherDecode encoded :: Either String SrcSpanInfo
case eitherDecodedOrString of
Left s -> putStrLn s
Right decoded -> do
putStrLn "decoded:"
putStrLn $ show decoded
putStrLn $ show $ decoded == original
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment