jmacro 0.6.15 → 0.6.16
raw patch · 2 files changed
+36/−26 lines, 2 filesdep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base
API changes (from Hackage documentation)
- Language.Javascript.JMacro: expr2stat :: JExpr -> JStat
+ Language.Javascript.JMacro: JTBool :: JType
+ Language.Javascript.JMacro: JTForall :: [VarRef] -> JType -> JType
+ Language.Javascript.JMacro: JTFree :: VarRef -> JType
+ Language.Javascript.JMacro: JTFunc :: [JType] -> JType -> JType
+ Language.Javascript.JMacro: JTImpossible :: JType
+ Language.Javascript.JMacro: JTList :: JType -> JType
+ Language.Javascript.JMacro: JTMap :: JType -> JType
+ Language.Javascript.JMacro: JTNum :: JType
+ Language.Javascript.JMacro: JTRecord :: JType -> Map String JType -> JType
+ Language.Javascript.JMacro: JTRigid :: VarRef -> Set Constraint -> JType
+ Language.Javascript.JMacro: JTStat :: JType
+ Language.Javascript.JMacro: JTString :: JType
+ Language.Javascript.JMacro: data JType
- Language.Javascript.JMacro: BreakStat :: (Maybe JsLabel) -> JStat
+ Language.Javascript.JMacro: BreakStat :: Maybe JsLabel -> JStat
- Language.Javascript.JMacro: ContinueStat :: (Maybe JsLabel) -> JStat
+ Language.Javascript.JMacro: ContinueStat :: Maybe JsLabel -> JStat
- Language.Javascript.JMacro: DeclStat :: Ident -> (Maybe JLocalType) -> JStat
+ Language.Javascript.JMacro: DeclStat :: Ident -> Maybe JLocalType -> JStat
- Language.Javascript.JMacro: JHash :: (Map String JExpr) -> JVal
+ Language.Javascript.JMacro: JHash :: Map String JExpr -> JVal
- Language.Javascript.JMacro: UnsatBlock :: (IdentSupply JStat) -> JStat
+ Language.Javascript.JMacro: UnsatBlock :: IdentSupply JStat -> JStat
- Language.Javascript.JMacro: UnsatExpr :: (IdentSupply JExpr) -> JExpr
+ Language.Javascript.JMacro: UnsatExpr :: IdentSupply JExpr -> JExpr
- Language.Javascript.JMacro: UnsatVal :: (IdentSupply JVal) -> JVal
+ Language.Javascript.JMacro: UnsatVal :: IdentSupply JVal -> JVal
- Language.Javascript.JMacro: jLam :: (ToSat a) => a -> JExpr
+ Language.Javascript.JMacro: jLam :: ToSat a => a -> JExpr
- Language.Javascript.JMacro: jTryCatchFinally :: (ToSat a) => JStat -> a -> JStat -> JStat
+ Language.Javascript.JMacro: jTryCatchFinally :: ToSat a => JStat -> a -> JStat -> JStat
- Language.Javascript.JMacro: jVar :: (ToSat a) => a -> JStat
+ Language.Javascript.JMacro: jVar :: ToSat a => a -> JStat
- Language.Javascript.JMacro: jVarTy :: (ToSat a) => a -> (Maybe JLocalType) -> JStat
+ Language.Javascript.JMacro: jVarTy :: ToSat a => a -> Maybe JLocalType -> JStat
- Language.Javascript.JMacro: jsSaturate :: (JMacro a) => Maybe String -> a -> a
+ Language.Javascript.JMacro: jsSaturate :: JMacro a => Maybe String -> a -> a
- Language.Javascript.JMacro.TypeCheck: SVConstrained :: (Set Constraint) -> StoreVal
+ Language.Javascript.JMacro.TypeCheck: SVConstrained :: Set Constraint -> StoreVal
- Language.Javascript.JMacro.TypeCheck: TMonad :: (ErrorT String (State TCState) a) -> TMonad a
+ Language.Javascript.JMacro.TypeCheck: TMonad :: ErrorT String (State TCState) a -> TMonad a
- Language.Javascript.JMacro.Types: JTFunc :: [JType] -> (JType) -> JType
+ Language.Javascript.JMacro.Types: JTFunc :: [JType] -> JType -> JType
- Language.Javascript.JMacro.Types: JTRecord :: JType -> (Map String JType) -> JType
+ Language.Javascript.JMacro.Types: JTRecord :: JType -> Map String JType -> JType
- Language.Javascript.JMacro.Types: JTRigid :: VarRef -> (Set Constraint) -> JType
+ Language.Javascript.JMacro.Types: JTRigid :: VarRef -> Set Constraint -> JType
- Language.Javascript.JMacro.Util: (<>) :: (ToJExpr a) => JExpr -> a -> JExpr
+ Language.Javascript.JMacro.Util: (<>) :: ToJExpr a => JExpr -> a -> JExpr
Files
- Language/Javascript/JMacro/Base.hs +32/−24
- jmacro.cabal +4/−2
Language/Javascript/JMacro/Base.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE FlexibleInstances, UndecidableInstances, OverlappingInstances, OverloadedStrings, TypeFamilies, RankNTypes, DeriveDataTypeable, StandaloneDeriving, FlexibleContexts, TypeSynonymInstances, ScopedTypeVariables, GADTs, GeneralizedNewtypeDeriving #-}+{-# LANGUAGE FlexibleInstances, UndecidableInstances, OverlappingInstances, OverloadedStrings, TypeFamilies, RankNTypes, DeriveDataTypeable, StandaloneDeriving, FlexibleContexts, TypeSynonymInstances, ScopedTypeVariables, GADTs+ , GeneralizedNewtypeDeriving, LambdaCase #-} ----------------------------------------------------------------------------- {- |@@ -86,9 +87,11 @@ takeOne :: State [Ident] Ident takeOne = do- (x:xs) <- get- put xs- return x+ get >>= \case+ (x:xs) -> do+ put xs+ return x+ _ -> fail "not enough elements" newIdentSupply :: Maybe String -> [Ident] newIdentSupply Nothing = newIdentSupply (Just "jmId")@@ -399,9 +402,11 @@ JMGId _ -> jtoGADT $ f x where inScope z = IS $ do- ([StrI a], b) <- splitAt 1 `fmap` get- put b- return $ withHygiene_ a f z+ splitAt 1 `fmap` get >>= \case+ ([StrI a], b) -> do+ put b+ return $ withHygiene_ a f z+ _ -> fail "Not as string" withHygiene_ :: JMacro a => String -> (a -> a) -> a -> a withHygiene_ un f x = jfromGADT $ case jtoGADT x of@@ -427,25 +432,28 @@ blocks (DeclStat (StrI i) t : xs) = case i of ('!':'!':i') -> (DeclStat (StrI i') t:) <$> blocks xs ('!':i') -> (DeclStat (StrI i') t:) <$> blocks xs- _ -> do- (newI:st) <- get- put st- rest <- blocks xs- return $ [DeclStat newI t `mappend` jsReplace_ [(StrI i, newI)] (BlockStat rest)]+ _ -> get >>= \case+ (newI:st) -> do+ put st+ rest <- blocks xs+ return $ [DeclStat newI t `mappend` jsReplace_ [(StrI i, newI)] (BlockStat rest)]+ _ -> fail "scopify" blocks (x':xs) = (jfromGADT <$> go (jtoGADT x')) <:> blocks xs (<:>) = liftM2 (:)- (JMGStat (ForInStat b (StrI i) e s)) -> do- (newI:st) <- get- put st- rest <- jfromGADT <$> go (jtoGADT s)- return $ JMGStat . ForInStat b newI e $ jsReplace_ [(StrI i, newI)] rest- (JMGStat (TryStat s (StrI i) s1 s2)) -> do- (newI:st) <- get- put st- t <- jfromGADT <$> go (jtoGADT s)- c <- jfromGADT <$> go (jtoGADT s1)- f <- jfromGADT <$> go (jtoGADT s2)- return . JMGStat . TryStat t newI (jsReplace_ [(StrI i, newI)] c) $ f+ (JMGStat (ForInStat b (StrI i) e s)) -> get >>= \case+ (newI:st) -> do+ put st+ rest <- jfromGADT <$> go (jtoGADT s)+ return $ JMGStat . ForInStat b newI e $ jsReplace_ [(StrI i, newI)] rest+ _ -> fail "scopify2"+ (JMGStat (TryStat s (StrI i) s1 s2)) -> get >>= \case+ (newI:st) -> do+ put st+ t <- jfromGADT <$> go (jtoGADT s)+ c <- jfromGADT <$> go (jtoGADT s1)+ f <- jfromGADT <$> go (jtoGADT s2)+ return . JMGStat . TryStat t newI (jsReplace_ [(StrI i, newI)] c) $ f+ _ -> fail "scopify3" (JMGExpr (ValExpr (JFunc is s))) -> do st <- get let (newIs,newSt) = splitAt (length is) st
jmacro.cabal view
@@ -1,5 +1,5 @@ name: jmacro-version: 0.6.15+version: 0.6.16 synopsis: QuasiQuotation library for programmatic generation of Javascript code. description: Javascript syntax, functional syntax, hygienic names, compile-time guarantees of syntactic correctness, limited typechecking. Additional documentation available at <http://www.haskell.org/haskellwiki/Jmacro> category: Language@@ -7,7 +7,7 @@ license-file: LICENSE author: Gershom Bazerman maintainer: gershomb@gmail.com-Tested-With: GHC == 8.4.2+Tested-With: GHC == 8.6.3 Build-Type: Simple Cabal-Version: >= 1.6 @@ -38,6 +38,7 @@ Language.Javascript.JMacro.Base Language.Javascript.JMacro.QQ Language.Javascript.JMacro.ParseTH+ Language.Javascript.JMacro executable jmacro-bench@@ -52,6 +53,7 @@ Language.Javascript.JMacro.Base Language.Javascript.JMacro.QQ Language.Javascript.JMacro.ParseTH+ Language.Javascript.JMacro else buildable: False