packages feed

jsaddle 0.9.5.0 → 0.9.6.0

raw patch · 4 files changed

+21/−51 lines, 4 filesdep ~aesondep ~containersdep ~exceptionsPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: aeson, containers, exceptions, lens, stm

API changes (from Hackage documentation)

- GHCJS.Prim.Internal: instance GHC.Exception.Exception GHCJS.Prim.Internal.JSException
- GHCJS.Prim.Internal: instance GHC.Exception.Exception GHCJS.Prim.Internal.WouldBlockException
- Language.Javascript.JSaddle.Exception: instance GHC.Exception.Exception Language.Javascript.JSaddle.Exception.JSException
- Language.Javascript.JSaddle.Run.Files: jsaddleJs :: ByteString
- Language.Javascript.JSaddle.Value: instance GHCJS.Marshal.Internal.FromJSVal a => GHCJS.Marshal.Internal.FromJSVal (GHC.Base.Maybe a)
- Language.Javascript.JSaddle.Value: instance GHCJS.Marshal.Internal.ToJSVal a => GHCJS.Marshal.Internal.ToJSVal (GHC.Base.Maybe a)
+ Data.JSString.Internal.Fusion.Types: infixl 2 :*:
+ GHCJS.Internal.Types: type family Mutability (a :: MutabilityType s) :: IsItMutable
+ GHCJS.Prim.Internal: instance GHC.Exception.Type.Exception GHCJS.Prim.Internal.JSException
+ GHCJS.Prim.Internal: instance GHC.Exception.Type.Exception GHCJS.Prim.Internal.WouldBlockException
+ JavaScript.TypedArray.Internal.Types: type family Elem x
+ Language.Javascript.JSaddle: type family Mutability (a :: MutabilityType s) :: IsItMutable
+ Language.Javascript.JSaddle.Exception: instance GHC.Exception.Type.Exception Language.Javascript.JSaddle.Exception.JSException
+ Language.Javascript.JSaddle.Types: instance Control.Monad.Fail.MonadFail Language.Javascript.JSaddle.Types.JSM
+ Language.Javascript.JSaddle.Types: type family Mutability (a :: MutabilityType s) :: IsItMutable
+ Language.Javascript.JSaddle.Value: instance GHCJS.Marshal.Internal.FromJSVal a => GHCJS.Marshal.Internal.FromJSVal (GHC.Maybe.Maybe a)
+ Language.Javascript.JSaddle.Value: instance GHCJS.Marshal.Internal.ToJSVal a => GHCJS.Marshal.Internal.ToJSVal (GHC.Maybe.Maybe a)
- Data.JSString.Internal.Fusion: [Stream] :: Stream a
+ Data.JSString.Internal.Fusion: [Stream] :: forall a s. () => (s -> Step s a) -> !s -> !Size -> Stream a
- Data.JSString.Internal.Fusion.Common: all :: Char -> Bool -> Stream Char -> Bool
+ Data.JSString.Internal.Fusion.Common: all :: (Char -> Bool) -> Stream Char -> Bool
- Data.JSString.Internal.Fusion.Common: any :: Char -> Bool -> Stream Char -> Bool
+ Data.JSString.Internal.Fusion.Common: any :: (Char -> Bool) -> Stream Char -> Bool
- Data.JSString.Internal.Fusion.Common: concatMap :: Char -> Stream Char -> Stream Char -> Stream Char
+ Data.JSString.Internal.Fusion.Common: concatMap :: (Char -> Stream Char) -> Stream Char -> Stream Char
- Data.JSString.Internal.Fusion.Common: dropWhile :: Char -> Bool -> Stream Char -> Stream Char
+ Data.JSString.Internal.Fusion.Common: dropWhile :: (Char -> Bool) -> Stream Char -> Stream Char
- Data.JSString.Internal.Fusion.Common: filter :: Char -> Bool -> Stream Char -> Stream Char
+ Data.JSString.Internal.Fusion.Common: filter :: (Char -> Bool) -> Stream Char -> Stream Char
- Data.JSString.Internal.Fusion.Common: findBy :: Char -> Bool -> Stream Char -> Maybe Char
+ Data.JSString.Internal.Fusion.Common: findBy :: (Char -> Bool) -> Stream Char -> Maybe Char
- Data.JSString.Internal.Fusion.Common: findIndexI :: Integral a => Char -> Bool -> Stream Char -> Maybe a
+ Data.JSString.Internal.Fusion.Common: findIndexI :: Integral a => (Char -> Bool) -> Stream Char -> Maybe a
- Data.JSString.Internal.Fusion.Common: foldl :: () => b -> Char -> b -> b -> Stream Char -> b
+ Data.JSString.Internal.Fusion.Common: foldl :: () => (b -> Char -> b) -> b -> Stream Char -> b
- Data.JSString.Internal.Fusion.Common: foldl' :: () => b -> Char -> b -> b -> Stream Char -> b
+ Data.JSString.Internal.Fusion.Common: foldl' :: () => (b -> Char -> b) -> b -> Stream Char -> b
- Data.JSString.Internal.Fusion.Common: foldl1 :: Char -> Char -> Char -> Stream Char -> Char
+ Data.JSString.Internal.Fusion.Common: foldl1 :: (Char -> Char -> Char) -> Stream Char -> Char
- Data.JSString.Internal.Fusion.Common: foldl1' :: Char -> Char -> Char -> Stream Char -> Char
+ Data.JSString.Internal.Fusion.Common: foldl1' :: (Char -> Char -> Char) -> Stream Char -> Char
- Data.JSString.Internal.Fusion.Common: foldr :: () => Char -> b -> b -> b -> Stream Char -> b
+ Data.JSString.Internal.Fusion.Common: foldr :: () => (Char -> b -> b) -> b -> Stream Char -> b
- Data.JSString.Internal.Fusion.Common: foldr1 :: Char -> Char -> Char -> Stream Char -> Char
+ Data.JSString.Internal.Fusion.Common: foldr1 :: (Char -> Char -> Char) -> Stream Char -> Char
- Data.JSString.Internal.Fusion.Common: map :: Char -> Char -> Stream Char -> Stream Char
+ Data.JSString.Internal.Fusion.Common: map :: (Char -> Char) -> Stream Char -> Stream Char
- Data.JSString.Internal.Fusion.Common: scanl :: Char -> Char -> Char -> Char -> Stream Char -> Stream Char
+ Data.JSString.Internal.Fusion.Common: scanl :: (Char -> Char -> Char) -> Char -> Stream Char -> Stream Char
- Data.JSString.Internal.Fusion.Common: takeWhile :: Char -> Bool -> Stream Char -> Stream Char
+ Data.JSString.Internal.Fusion.Common: takeWhile :: (Char -> Bool) -> Stream Char -> Stream Char
- Data.JSString.Internal.Fusion.Common: unfoldr :: () => a -> Maybe (Char, a) -> a -> Stream Char
+ Data.JSString.Internal.Fusion.Common: unfoldr :: () => (a -> Maybe (Char, a)) -> a -> Stream Char
- Data.JSString.Internal.Fusion.Common: unfoldrNI :: Integral a => a -> b -> Maybe (Char, b) -> b -> Stream Char
+ Data.JSString.Internal.Fusion.Common: unfoldrNI :: Integral a => a -> (b -> Maybe (Char, b)) -> b -> Stream Char
- Data.JSString.Internal.Fusion.Common: zipWith :: () => a -> a -> b -> Stream a -> Stream a -> Stream b
+ Data.JSString.Internal.Fusion.Common: zipWith :: () => (a -> a -> b) -> Stream a -> Stream a -> Stream b
- Data.JSString.Internal.Fusion.Types: [Stream] :: Stream a
+ Data.JSString.Internal.Fusion.Types: [Stream] :: forall a s. () => (s -> Step s a) -> !s -> !Size -> Stream a
- GHCJS.Prim.Internal: JSVal :: (IORef JSValueRef) -> JSVal
+ GHCJS.Prim.Internal: JSVal :: IORef JSValueRef -> JSVal
- Language.Javascript.JSaddle: (!!) :: (MakeObject this) => this -> Int -> JSM JSVal
+ Language.Javascript.JSaddle: (!!) :: MakeObject this => this -> Int -> JSM JSVal
- Language.Javascript.JSaddle: GHCJSPure :: (JSM a) -> GHCJSPure a
+ Language.Javascript.JSaddle: GHCJSPure :: JSM a -> GHCJSPure a
- Language.Javascript.JSaddle: JSContextRef :: Int64 -> UTCTime -> Command -> IO Result -> AsyncCommand -> IO () -> Object -> JSCallAsFunction -> IO () -> TVar JSValueRef -> Bool -> IO () -> MVar (Set Text) -> MVar [Double -> JSM ()] -> MVar (Set Int64) -> JSContextRef
+ Language.Javascript.JSaddle: JSContextRef :: Int64 -> UTCTime -> (Command -> IO Result) -> (AsyncCommand -> IO ()) -> (Object -> JSCallAsFunction -> IO ()) -> TVar JSValueRef -> (Bool -> IO ()) -> MVar (Set Text) -> MVar [Double -> JSM ()] -> MVar (Set Int64) -> JSContextRef
- Language.Javascript.JSaddle: JSVal :: (IORef JSValueRef) -> JSVal
+ Language.Javascript.JSaddle: JSVal :: IORef JSValueRef -> JSVal
- Language.Javascript.JSaddle: bracket :: MonadMask m => m a -> a -> m b -> a -> m c -> m c
+ Language.Javascript.JSaddle: bracket :: MonadMask m => m a -> (a -> m c) -> (a -> m b) -> m b
- Language.Javascript.JSaddle: catch :: (MonadCatch m, Exception e) => m a -> e -> m a -> m a
+ Language.Javascript.JSaddle: catch :: (MonadCatch m, Exception e) => m a -> (e -> m a) -> m a
- Language.Javascript.JSaddle: eval :: (ToJSString script) => script -> JSM JSVal
+ Language.Javascript.JSaddle: eval :: ToJSString script => script -> JSM JSVal
- Language.Javascript.JSaddle: js0 :: (ToJSString name) => name -> JSF
+ Language.Javascript.JSaddle: js0 :: ToJSString name => name -> JSF
- Language.Javascript.JSaddle: jsg0 :: (ToJSString name) => name -> JSM JSVal
+ Language.Javascript.JSaddle: jsg0 :: ToJSString name => name -> JSM JSVal
- Language.Javascript.JSaddle: objSetPropertyAtIndex :: (ToJSVal val) => Object -> Int -> val -> JSM ()
+ Language.Javascript.JSaddle: objSetPropertyAtIndex :: ToJSVal val => Object -> Int -> val -> JSM ()
- Language.Javascript.JSaddle: type JSCallAsFunction = JSVal Function object -> JSVal this -> [JSVal] Function arguments -> JSM () Only () (aka 'JSUndefined') can be returned because the function may need to be executed in a different thread. If you need to get a value out pass in a continuation function as an argument and invoke it from haskell.
+ Language.Javascript.JSaddle: type JSCallAsFunction = JSVal " Function object" -> JSVal " this" -> [JSVal] " Function arguments" -> JSM () " Only () (aka 'JSUndefined') can be returned because the function may need to be executed in a different thread. If you need to get a value out pass in a continuation function as an argument and invoke it from haskell."
- Language.Javascript.JSaddle: type JSUndefined = () A type that can only be undefined in JavaScript. Using () because functions in JavaScript that have no return, impicitly return undefined. type JSBool = Bool -- ^ JavaScript boolean values map the 'Bool' haskell type. type JSNumber = Double -- ^ A number in JavaScript maps nicely to 'Double'. type JSString = Text -- ^ JavaScript strings can be represented with the Haskell 'Text' type.
+ Language.Javascript.JSaddle: type JSUndefined = () " A type that can only be undefined in JavaScript. Using () because functions in JavaScript that have no return, impicitly return undefined. type JSBool = Bool -- ^ JavaScript boolean values map the 'Bool' haskell type. type JSNumber = Double -- ^ A number in JavaScript maps nicely to 'Double'. type JSString = Text -- ^ JavaScript strings can be represented with the Haskell 'Text' type."
- Language.Javascript.JSaddle.Evaluate: eval :: (ToJSString script) => script -> JSM JSVal
+ Language.Javascript.JSaddle.Evaluate: eval :: ToJSString script => script -> JSM JSVal
- Language.Javascript.JSaddle.Monad: bracket :: MonadMask m => m a -> a -> m b -> a -> m c -> m c
+ Language.Javascript.JSaddle.Monad: bracket :: MonadMask m => m a -> (a -> m c) -> (a -> m b) -> m b
- Language.Javascript.JSaddle.Monad: catch :: (MonadCatch m, Exception e) => m a -> e -> m a -> m a
+ Language.Javascript.JSaddle.Monad: catch :: (MonadCatch m, Exception e) => m a -> (e -> m a) -> m a
- Language.Javascript.JSaddle.Object: (!!) :: (MakeObject this) => this -> Int -> JSM JSVal
+ Language.Javascript.JSaddle.Object: (!!) :: MakeObject this => this -> Int -> JSM JSVal
- Language.Javascript.JSaddle.Object: js0 :: (ToJSString name) => name -> JSF
+ Language.Javascript.JSaddle.Object: js0 :: ToJSString name => name -> JSF
- Language.Javascript.JSaddle.Object: jsg0 :: (ToJSString name) => name -> JSM JSVal
+ Language.Javascript.JSaddle.Object: jsg0 :: ToJSString name => name -> JSM JSVal
- Language.Javascript.JSaddle.Object: type JSCallAsFunction = JSVal Function object -> JSVal this -> [JSVal] Function arguments -> JSM () Only () (aka 'JSUndefined') can be returned because the function may need to be executed in a different thread. If you need to get a value out pass in a continuation function as an argument and invoke it from haskell.
+ Language.Javascript.JSaddle.Object: type JSCallAsFunction = JSVal " Function object" -> JSVal " this" -> [JSVal] " Function arguments" -> JSM () " Only () (aka 'JSUndefined') can be returned because the function may need to be executed in a different thread. If you need to get a value out pass in a continuation function as an argument and invoke it from haskell."
- Language.Javascript.JSaddle.Properties: objSetPropertyAtIndex :: (ToJSVal val) => Object -> Int -> val -> JSM ()
+ Language.Javascript.JSaddle.Properties: objSetPropertyAtIndex :: ToJSVal val => Object -> Int -> val -> JSM ()
- Language.Javascript.JSaddle.Types: GHCJSPure :: (JSM a) -> GHCJSPure a
+ Language.Javascript.JSaddle.Types: GHCJSPure :: JSM a -> GHCJSPure a
- Language.Javascript.JSaddle.Types: JSContextRef :: Int64 -> UTCTime -> Command -> IO Result -> AsyncCommand -> IO () -> Object -> JSCallAsFunction -> IO () -> TVar JSValueRef -> Bool -> IO () -> MVar (Set Text) -> MVar [Double -> JSM ()] -> MVar (Set Int64) -> JSContextRef
+ Language.Javascript.JSaddle.Types: JSContextRef :: Int64 -> UTCTime -> (Command -> IO Result) -> (AsyncCommand -> IO ()) -> (Object -> JSCallAsFunction -> IO ()) -> TVar JSValueRef -> (Bool -> IO ()) -> MVar (Set Text) -> MVar [Double -> JSM ()] -> MVar (Set Int64) -> JSContextRef
- Language.Javascript.JSaddle.Types: JSVal :: (IORef JSValueRef) -> JSVal
+ Language.Javascript.JSaddle.Types: JSVal :: IORef JSValueRef -> JSVal
- Language.Javascript.JSaddle.Types: type JSCallAsFunction = JSVal Function object -> JSVal this -> [JSVal] Function arguments -> JSM () Only () (aka 'JSUndefined') can be returned because the function may need to be executed in a different thread. If you need to get a value out pass in a continuation function as an argument and invoke it from haskell.
+ Language.Javascript.JSaddle.Types: type JSCallAsFunction = JSVal " Function object" -> JSVal " this" -> [JSVal] " Function arguments" -> JSM () " Only () (aka 'JSUndefined') can be returned because the function may need to be executed in a different thread. If you need to get a value out pass in a continuation function as an argument and invoke it from haskell."
- Language.Javascript.JSaddle.Value: type JSUndefined = () A type that can only be undefined in JavaScript. Using () because functions in JavaScript that have no return, impicitly return undefined. type JSBool = Bool -- ^ JavaScript boolean values map the 'Bool' haskell type. type JSNumber = Double -- ^ A number in JavaScript maps nicely to 'Double'. type JSString = Text -- ^ JavaScript strings can be represented with the Haskell 'Text' type.
+ Language.Javascript.JSaddle.Value: type JSUndefined = () " A type that can only be undefined in JavaScript. Using () because functions in JavaScript that have no return, impicitly return undefined. type JSBool = Bool -- ^ JavaScript boolean values map the 'Bool' haskell type. type JSNumber = Double -- ^ A number in JavaScript maps nicely to 'Double'. type JSString = Text -- ^ JavaScript strings can be represented with the Haskell 'Text' type."

Files

jsaddle.cabal view
@@ -1,5 +1,5 @@ name: jsaddle-version: 0.9.5.0+version: 0.9.6.0 cabal-version: >=1.10 build-type: Simple license: MIT@@ -36,7 +36,7 @@     else         build-depends:             attoparsec >=0.11 && <0.14,-            containers >=0.5.6.2 && <0.6,+            containers >=0.5.6.2 && <0.7,             deepseq >=1.3 && < 1.5,             filepath >=1.4.0.0 && <1.5,             ghc-prim,@@ -45,7 +45,7 @@             random >= 1.1 && < 1.2,             ref-tf >=0.4.0.1 && <0.5,             scientific >=0.3 && <0.4,-            stm >=2.4.4 && <2.5,+            stm >=2.4.4 && <2.6,             time >=1.5.0.1 && <1.9,             unordered-containers >=0.2 && <0.3,             vector >=0.10 && <0.13,@@ -107,12 +107,12 @@         Language.Javascript.JSaddle.Value         Language.Javascript.JSaddle.Types     build-depends:-        aeson >=0.8.0.2 && <1.3,-        base <5,+        aeson >=0.8.0.2 && <1.5,+        base >=4.9 && <5,         base64-bytestring >=1.0.0.1 && <1.1,         bytestring >=0.10.6.0 && <0.11,-        exceptions >=0.8 && <0.9,-        lens >=3.8.5 && <4.17,+        exceptions >=0.8 && <0.11,+        lens >=3.8.5 && <4.18,         primitive >=0.6.1.0 && <0.7,         text >=1.2.1.3 && <1.3,         transformers >=0.4.2.0 && <0.6@@ -123,5 +123,3 @@         cpp-options: -DCHECK_UNCHECKED     if flag(call-stacks) || flag(check-unchecked)         cpp-options: -DJSADDLE_HAS_CALL_STACK--
src/Language/Javascript/JSaddle.hs view
@@ -9,7 +9,7 @@ -- | This package provides an EDSL for calling JavaScript that --   can be used both from GHCJS and GHC.  When using GHC --   the application is run using Warp and WebSockets to---   drive a small JavaScipt helper.+--   drive a small JavaScript helper. -----------------------------------------------------------------------------  module Language.Javascript.JSaddle (@@ -35,10 +35,10 @@   --   --   Where it makes sense code examples are given in two forms.  One   --   that uses 'eval' to run a purely JavaScript version and one that-  --   uses more of the JSaddle EDSL feature being demonstated.+  --   uses more of the JSaddle EDSL feature being demonstrated.    -- * Calling Haskell from JavaScript-  -- | You can call back into haskell from JavaScript using 'fun' to+  -- | You can call back into Haskell from JavaScript using 'fun' to   --   convert a Haskell function in the JSM monad into a javascript   --   value. @@ -52,8 +52,8 @@   --   and the server will run the Haskell code.  The JSaddle parts will   --   be executed by sending commands back to the browser. -  --   Although the code JavaScript code is executed in the the strict order-  --   set out by the EDSL it done asynchonously to the Haskell code.+  --   Although the JavaScript code is executed in the strict order+  --   set out by the EDSL it is done asynchronously to the Haskell code.   --   This improves the performance by reducing the number of round trips   --   needed between the Haskell and JavaScript code. 
src/Language/Javascript/JSaddle/Run/Files.hs view
@@ -13,7 +13,6 @@  module Language.Javascript.JSaddle.Run.Files (     indexHtml-  , jsaddleJs   , initState   , runBatch   , ghcjsHelpers@@ -335,41 +334,6 @@     \    }\n\     \  };\n\     \  runBatch(batch);\n\-    \"---- Use this to generate this string for embedding--- sed -e 's|\\|\\\\|g' -e 's|^|    \\|' -e 's|$|\\n\\|' -e 's|"|\\"|g' data/jsaddle.js | pbcopy-jsaddleJs :: ByteString-jsaddleJs = "\-    \if(typeof global !== \"undefined\") {\n\-    \    global.window = global;\n\-    \    global.WebSocket = require('ws');\n\-    \}\n\-    \\n\-    \var connect = function() {\n\-    \    var wsaddress =\n\-    \            typeof window.location === \"undefined\"\n\-    \                ? \"ws://localhost:3709/\"\n\-    \                : window.location.protocol.replace('http', 'ws')+\"//\"+window.location.hostname+(window.location.port?(\":\"+window.location.port):\"\");\n\-    \\n\-    \    var ws = new WebSocket(wsaddress);\n\-    \\n\-    \    ws.onopen = function(e) {\n\-    \ " <> initState <> "\-    \\n\-    \        ws.onmessage = function(e) {\n\-    \            var batch = JSON.parse(e.data);\n\-    \\n\-    \ " <> runBatch (\a -> "ws.send(JSON.stringify(" <> a <> "));") Nothing <> "\-    \        };\n\-    \    };\n\-    \    ws.onerror = function() {\n\-    \        setTimeout(connect, 1000);\n\-    \    };\n\-    \}\n\-    \\n\-    \ " <> ghcjsHelpers <> "\-    \connect();\n\     \"  ghcjsHelpers :: ByteString
src/Language/Javascript/JSaddle/Types.hs view
@@ -124,6 +124,7 @@        (defaultOptions, genericToEncoding, ToJSON(..), FromJSON(..), Value) import GHC.Generics (Generic) import Control.Monad.IO.Unlift (MonadUnliftIO)+import qualified Control.Monad.Fail as Fail #endif  #if MIN_VERSION_base(4,9,0) && defined(CHECK_UNCHECKED)@@ -165,7 +166,7 @@ type JSM = IO #else newtype JSM a = JSM { unJSM :: ReaderT JSContextRef IO a }-    deriving (Functor, Applicative, Monad, MonadIO, MonadFix, MonadThrow, MonadUnliftIO)+    deriving (Functor, Applicative, Monad, MonadIO, MonadFix, MonadThrow, MonadUnliftIO, Fail.MonadFail)  instance MonadCatch JSM where     t `catch` c = JSM (unJSM (syncAfter t) `catch` \e -> unJSM (c e))@@ -178,6 +179,13 @@     JSM $ uninterruptibleMask $ \unmask -> unJSM (a $ q unmask)       where q :: (ReaderT JSContextRef IO a -> ReaderT JSContextRef IO a) -> JSM a -> JSM a             q unmask (JSM b) = syncAfter . JSM $ unmask b+#if MIN_VERSION_exceptions(0,9,0)+  generalBracket acquire release use =+    JSM $ generalBracket+      (unJSM acquire)+      (\resource exitCase -> unJSM $ release resource exitCase)+      (unJSM . syncAfter . use)+#endif  #endif