{-# LANGUAGE QuasiQuotes, OverloadedStrings, TemplateHaskell, RecordWildCards, ScopedTypeVariables, NamedFieldPuns, KindSignatures #-}
module Misc where
import Data.Aeson as A
import Data.Aeson.TH as A
import Data.Aeson.TypeScript.TH
import qualified Data.ByteString.Lazy.Char8 as BL8
import Data.Char
import Data.Monoid ((<>))
import Data.Proxy
import Data.String.Interpolate.IsString
import Language.Haskell.TH
import Language.Haskell.TH.Datatype
import Prelude hiding (Double)
import System.IO.Unsafe (unsafePerformIO)
import Test.Hspec
import Debug.Trace
data HigherKind a = HigherKind { higherKindList :: [a] }
$(deriveTypeScript A.defaultOptions ''HigherKind)
data Foo = Foo { fooString :: String
, fooInt :: Int }
| Bar { barString :: String
, barMaybe :: Maybe Int
, bazReference :: Baz
, higherKindReference :: HigherKind String }
data Baz = Baz { bazString :: String }
$(deriveTypeScript A.defaultOptions ''Foo)
$(deriveTypeScript A.defaultOptions ''Baz)
data EvenHigherKind a b = EvenHigherKind { someList :: [b]
, higherKindThing :: HigherKind a }
$(deriveTypeScript A.defaultOptions ''EvenHigherKind)
main = putStrLn $ formatTSDeclarations (
(getTypeScriptDeclarations (Proxy :: Proxy HigherKind))
<> (getTypeScriptDeclarations (Proxy :: Proxy Foo))
<> (getTypeScriptDeclarations (Proxy :: Proxy Baz))
<> (getTypeScriptDeclarations (Proxy :: Proxy D))
<> (getTypeScriptDeclarations (Proxy :: Proxy EvenHigherKind))
)
data D a = Nullary
| Unary Int
| Product String Char a
| Record { testOne :: Int
, testTwo :: Bool
, testThree :: D a
} deriving Eq
d :: D Int
d = Record { testOne = 3
, testTwo = True
, testThree = Product "test" 'A' 123
}
$(deriveTypeScript (defaultOptions{fieldLabelModifier = drop 4, constructorTagModifier = map toLower}) ''D)
$(deriveJSON (defaultOptions{fieldLabelModifier = drop 4, constructorTagModifier = map toLower}) ''D)
-- type JupyterInterpreterType = String
-- data InterpreterType = Normal
-- | Jupyter JupyterInterpreterType deriving (Eq, Ord, Show)
-- $(deriveTypeScript (A.defaultOptions { sumEncoding=UntaggedValue }) ''InterpreterType)