jmacro 0.6.13 → 0.6.14
raw patch · 3 files changed
+16/−17 lines, 3 filesdep ~basedep ~wl-pprint-textPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base, wl-pprint-text
API changes (from Hackage documentation)
- Language.Javascript.JMacro: runIdentSupply :: IdentSupply a -> State [Ident] a
- Language.Javascript.JMacro.TypeCheck: instance Applicative TMonad
- Language.Javascript.JMacro.TypeCheck: instance Compos1 JType
- Language.Javascript.JMacro.TypeCheck: instance Functor TMonad
- Language.Javascript.JMacro.TypeCheck: instance JTypeCheck JExpr
- Language.Javascript.JMacro.TypeCheck: instance JTypeCheck JStat
- Language.Javascript.JMacro.TypeCheck: instance JTypeCheck JVal
- Language.Javascript.JMacro.TypeCheck: instance Monad TMonad
- Language.Javascript.JMacro.TypeCheck: instance MonadError String TMonad
- Language.Javascript.JMacro.TypeCheck: instance MonadState TCState TMonad
- Language.Javascript.JMacro.TypeCheck: instance Show StoreVal
- Language.Javascript.JMacro.TypeCheck: instance Show TCState
- Language.Javascript.JMacro.TypeCheck: tc_context :: TCState -> [TMonad String]
- Language.Javascript.JMacro.TypeCheck: tc_env :: TCState -> [Map Ident JType]
- Language.Javascript.JMacro.TypeCheck: tc_frozen :: TCState -> Set Int
- Language.Javascript.JMacro.TypeCheck: tc_stack :: TCState -> [Set Int]
- Language.Javascript.JMacro.TypeCheck: tc_varCt :: TCState -> Int
- Language.Javascript.JMacro.TypeCheck: tc_vars :: TCState -> Map Int StoreVal
- Language.Javascript.JMacro.TypeCheck: unC :: C b a -> b
- Language.Javascript.JMacro.Types: instance Data Constraint
- Language.Javascript.JMacro.Types: instance Data JType
- Language.Javascript.JMacro.Types: instance Eq Constraint
- Language.Javascript.JMacro.Types: instance Eq JType
- Language.Javascript.JMacro.Types: instance Ord Constraint
- Language.Javascript.JMacro.Types: instance Ord JType
- Language.Javascript.JMacro.Types: instance Read Constraint
- Language.Javascript.JMacro.Types: instance Read JType
- Language.Javascript.JMacro.Types: instance Show Constraint
- Language.Javascript.JMacro.Types: instance Show JType
- Language.Javascript.JMacro.Types: instance Typeable Constraint
- Language.Javascript.JMacro.Types: instance Typeable JType
+ Language.Javascript.JMacro: [runIdentSupply] :: IdentSupply a -> State [Ident] a
+ Language.Javascript.JMacro.TypeCheck: [tc_context] :: TCState -> [TMonad String]
+ Language.Javascript.JMacro.TypeCheck: [tc_env] :: TCState -> [Map Ident JType]
+ Language.Javascript.JMacro.TypeCheck: [tc_frozen] :: TCState -> Set Int
+ Language.Javascript.JMacro.TypeCheck: [tc_stack] :: TCState -> [Set Int]
+ Language.Javascript.JMacro.TypeCheck: [tc_varCt] :: TCState -> Int
+ Language.Javascript.JMacro.TypeCheck: [tc_vars] :: TCState -> Map Int StoreVal
+ Language.Javascript.JMacro.TypeCheck: [unC] :: C b a -> b
+ Language.Javascript.JMacro.TypeCheck: instance Control.Monad.Error.Class.MonadError GHC.Base.String Language.Javascript.JMacro.TypeCheck.TMonad
+ Language.Javascript.JMacro.TypeCheck: instance Control.Monad.State.Class.MonadState Language.Javascript.JMacro.TypeCheck.TCState Language.Javascript.JMacro.TypeCheck.TMonad
+ Language.Javascript.JMacro.TypeCheck: instance GHC.Base.Applicative Language.Javascript.JMacro.TypeCheck.TMonad
+ Language.Javascript.JMacro.TypeCheck: instance GHC.Base.Functor Language.Javascript.JMacro.TypeCheck.TMonad
+ Language.Javascript.JMacro.TypeCheck: instance GHC.Base.Monad Language.Javascript.JMacro.TypeCheck.TMonad
+ Language.Javascript.JMacro.TypeCheck: instance GHC.Show.Show Language.Javascript.JMacro.TypeCheck.StoreVal
+ Language.Javascript.JMacro.TypeCheck: instance GHC.Show.Show Language.Javascript.JMacro.TypeCheck.TCState
+ Language.Javascript.JMacro.TypeCheck: instance Language.Javascript.JMacro.TypeCheck.Compos1 Language.Javascript.JMacro.Types.JType
+ Language.Javascript.JMacro.TypeCheck: instance Language.Javascript.JMacro.TypeCheck.JTypeCheck Language.Javascript.JMacro.Base.JExpr
+ Language.Javascript.JMacro.TypeCheck: instance Language.Javascript.JMacro.TypeCheck.JTypeCheck Language.Javascript.JMacro.Base.JStat
+ Language.Javascript.JMacro.TypeCheck: instance Language.Javascript.JMacro.TypeCheck.JTypeCheck Language.Javascript.JMacro.Base.JVal
+ Language.Javascript.JMacro.Types: instance Data.Data.Data Language.Javascript.JMacro.Types.Constraint
+ Language.Javascript.JMacro.Types: instance Data.Data.Data Language.Javascript.JMacro.Types.JType
+ Language.Javascript.JMacro.Types: instance GHC.Classes.Eq Language.Javascript.JMacro.Types.Constraint
+ Language.Javascript.JMacro.Types: instance GHC.Classes.Eq Language.Javascript.JMacro.Types.JType
+ Language.Javascript.JMacro.Types: instance GHC.Classes.Ord Language.Javascript.JMacro.Types.Constraint
+ Language.Javascript.JMacro.Types: instance GHC.Classes.Ord Language.Javascript.JMacro.Types.JType
+ Language.Javascript.JMacro.Types: instance GHC.Read.Read Language.Javascript.JMacro.Types.Constraint
+ Language.Javascript.JMacro.Types: instance GHC.Read.Read Language.Javascript.JMacro.Types.JType
+ Language.Javascript.JMacro.Types: instance GHC.Show.Show Language.Javascript.JMacro.Types.Constraint
+ Language.Javascript.JMacro.Types: instance GHC.Show.Show Language.Javascript.JMacro.Types.JType
- 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.Util: (<>) :: ToJExpr a => JExpr -> a -> JExpr
+ Language.Javascript.JMacro.Util: (<>) :: (ToJExpr a) => JExpr -> a -> JExpr
Files
- Language/Javascript/JMacro.hs +12/−12
- Language/Javascript/JMacro/Prelude.hs +1/−2
- jmacro.cabal +3/−3
Language/Javascript/JMacro.hs view
@@ -14,53 +14,53 @@ usage: -> renderJs [$jmacro|fun id x -> x|]+> renderJs [jmacro|fun id x -> x|] The above produces the id function at the top level. -> renderJs [$jmacro|var id = \x -> x;|]+> renderJs [jmacro|var id = \x -> x;|] So does the above here. However, as id is brought into scope by the keyword var, you do not get a variable named id in the generated javascript, but a variable with an arbitrary unique identifier. -> renderJs [$jmacro|var !id = \x -> x;|]+> renderJs [jmacro|var !id = \x -> x;|] The above, by using the bang special form in a var declaration, produces a variable that really is named id. -> renderJs [$jmacro|function id(x) {return x;}|]+> renderJs [jmacro|function id(x) {return x;}|] The above is also id. -> renderJs [$jmacro|function !id(x) {return x;}|]+> renderJs [jmacro|function !id(x) {return x;}|] As is the above (with the correct name). -> renderJs [$jmacro|fun id x {return x;}|]+> renderJs [jmacro|fun id x {return x;}|] As is the above. -> renderJs [$jmacroE|foo(x,y)|]+> renderJs [jmacroE|foo(x,y)|] The above is an expression representing the application of foo to x and y. -> renderJs [$jmacroE|foo x y|]]+> renderJs [jmacroE|foo x y|]] As is the above. -> renderJs [$jmacroE|foo (x,y)|]+> renderJs [jmacroE|foo (x,y)|] While the above is an error. (i.e. standard javascript function application cannot seperate the leading parenthesis of the argument from the function being applied) -> \x -> [$jmacroE|foo `(x)`|]+> \x -> [jmacroE|foo `(x)`|] The above is a haskell expression that provides a function that takes an x, and yields an expression representing the application of foo to the value of x as transformed to a Javascript expression. -> [$jmacroE|\x ->`(foo x)`|]+> [jmacroE|\x ->`(foo x)`|] Meanwhile, the above lambda is in Javascript, and brings the variable into scope both in javascript and in the enclosed antiquotes. The expression is a Javascript function that takes an x, and yields an expression produced by the application of the Haskell function foo as applied to the identifier x (which is of type JExpr -- i.e. a Javascript expression). Other than that, the language is essentially Javascript (1.5). Note however that one must use semicolons in a principled fashion -- i.e. to end statements consistently. Otherwise, the parser will mistake the whitespace for a whitespace application, and odd things will occur. A further gotcha exists in regex literals, whicch cannot begin with a space. @x / 5 / 4@ parses as ((x / 5) / 4). However, @x /5 / 4@ will parse as x(/5 /, 4). Such are the perils of operators used as delimeters in the presence of whitespace application. -Additional features in jmacro (documented on the wiki) include an infix application operator, and an enhanced destructuring bind. +Additional features in jmacro (documented on the wiki) include an infix application operator, and an enhanced destructuring bind. Additional datatypes can be marshalled to Javascript by proper instance declarations for the ToJExpr class.
Language/Javascript/JMacro/Prelude.hs view
@@ -16,7 +16,7 @@ -- | This provides a set of basic functional programming primitives, a few utility functions -- and, more importantly, a decent sample of idiomatic jmacro code. View the source for details. jmPrelude :: JStat-jmPrelude = [$jmacro|+jmPrelude = [jmacro| fun withHourglass f { document.body.style.cursor="wait";@@ -350,4 +350,3 @@ }; |]-
jmacro.cabal view
@@ -1,5 +1,5 @@ name: jmacro-version: 0.6.13+version: 0.6.14 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 == 7.10+Tested-With: GHC == 8.0.1 Build-Type: Simple Cabal-Version: >= 1.6 @@ -29,7 +29,7 @@ default: False executable jmacro- build-depends: parseargs+ build-depends: base >= 4, base < 5, containers, wl-pprint-text, text, safe >= 0.2, parsec > 3.0, template-haskell >= 2.3, mtl > 1.1 , haskell-src-exts, haskell-src-meta, bytestring >= 0.9, syb, aeson >= 0.5 , regex-posix > 0.9, vector >= 0.8, unordered-containers >= 0.2, parseargs main-is: Language/Javascript/JMacro/Executable.hs executable jmacro-bench