{-# LANGUAGE ScopedTypeVariables,
             FlexibleContexts,
             FlexibleInstances,
             OverloadedStrings,
             TupleSections,
             LambdaCase #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

module GHCJS.Marshal ( FromJSVal(..)
                     , ToJSVal(..)
                     , toJSVal_aeson
                     , toJSVal_pure
                     ) where

import           Control.Monad (join)
import           Control.Monad.Trans.Maybe (MaybeT(..), runMaybeT)

import qualified Data.Aeson as AE
import           Data.Int (Int8, Int16, Int32)
import           Data.Text (Text)
import           Data.Word (Word8, Word16, Word32, Word)

import           GHC.Prim

import           Language.Javascript.JSaddle.Types (JSM, JSVal, SomeJSArray(..), ghcjsPure)
import           Language.Javascript.JSaddle.Native.Internal
                 (valueToJSONValue, jsonValueToValue, valueToNumber)

import           GHCJS.Types (JSString, isUndefined, isNull)
import           GHCJS.Foreign.Internal (isTruthy)
import           GHCJS.Marshal.Pure ()

import           JavaScript.Array (fromListIO)
import qualified JavaScript.Array as A (read)

import           GHCJS.Marshal.Internal

instance FromJSVal JSVal where
  fromJSValUnchecked :: JSVal -> JSM JSVal
fromJSValUnchecked JSVal
x = forall (m :: * -> *) a. Monad m => a -> m a
return JSVal
x
  {-# INLINE fromJSValUnchecked #-}
  fromJSVal :: JSVal -> JSM (Maybe JSVal)
fromJSVal = forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> Maybe a
Just
  {-# INLINE fromJSVal #-}
instance FromJSVal () where
  fromJSValUnchecked :: JSVal -> JSM ()
fromJSValUnchecked = forall a. PFromJSVal a => JSVal -> JSM a
fromJSValUnchecked_pure
  {-# INLINE fromJSValUnchecked #-}
  fromJSVal :: JSVal -> JSM (Maybe ())
fromJSVal = forall a. PFromJSVal a => JSVal -> JSM (Maybe a)
fromJSVal_pure
--    {-# INLINE fromJSVal #-}
instance FromJSVal Bool where
    fromJSValUnchecked :: JSVal -> JSM Bool
fromJSValUnchecked = forall a. GHCJSPure a -> JSM a
ghcjsPure forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> GHCJSPure Bool
isTruthy
    {-# INLINE fromJSValUnchecked #-}
    fromJSVal :: JSVal -> JSM (Maybe Bool)
fromJSVal = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. GHCJSPure a -> JSM a
ghcjsPure forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> GHCJSPure Bool
isTruthy
    {-# INLINE fromJSVal #-}
instance FromJSVal Int where
    fromJSValUnchecked :: JSVal -> JSM Int
fromJSValUnchecked = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. (RealFrac a, Integral b) => a -> b
round forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSValUnchecked #-}
    fromJSVal :: JSVal -> JSM (Maybe Int)
fromJSVal = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (RealFrac a, Integral b) => a -> b
round) forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSVal #-}
instance FromJSVal Int8 where
    fromJSValUnchecked :: JSVal -> JSM Int8
fromJSValUnchecked = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. (RealFrac a, Integral b) => a -> b
round forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSValUnchecked #-}
    fromJSVal :: JSVal -> JSM (Maybe Int8)
fromJSVal = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (RealFrac a, Integral b) => a -> b
round) forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSVal #-}
instance FromJSVal Int16 where
    fromJSValUnchecked :: JSVal -> JSM Int16
fromJSValUnchecked = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. (RealFrac a, Integral b) => a -> b
round forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSValUnchecked #-}
    fromJSVal :: JSVal -> JSM (Maybe Int16)
fromJSVal = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (RealFrac a, Integral b) => a -> b
round) forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSVal #-}
instance FromJSVal Int32 where
    fromJSValUnchecked :: JSVal -> JSM Int32
fromJSValUnchecked = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. (RealFrac a, Integral b) => a -> b
round forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSValUnchecked #-}
    fromJSVal :: JSVal -> JSM (Maybe Int32)
fromJSVal = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (RealFrac a, Integral b) => a -> b
round) forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSVal #-}
instance FromJSVal Word where
    fromJSValUnchecked :: JSVal -> JSM Word
fromJSValUnchecked = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. (RealFrac a, Integral b) => a -> b
round forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSValUnchecked #-}
    fromJSVal :: JSVal -> JSM (Maybe Word)
fromJSVal = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (RealFrac a, Integral b) => a -> b
round) forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSVal #-}
instance FromJSVal Word8 where
    fromJSValUnchecked :: JSVal -> JSM Word8
fromJSValUnchecked = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. (RealFrac a, Integral b) => a -> b
round forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSValUnchecked #-}
    fromJSVal :: JSVal -> JSM (Maybe Word8)
fromJSVal = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (RealFrac a, Integral b) => a -> b
round) forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSVal #-}
instance FromJSVal Word16 where
    fromJSValUnchecked :: JSVal -> JSM Word16
fromJSValUnchecked = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. (RealFrac a, Integral b) => a -> b
round forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSValUnchecked #-}
    fromJSVal :: JSVal -> JSM (Maybe Word16)
fromJSVal = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (RealFrac a, Integral b) => a -> b
round) forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSVal #-}
instance FromJSVal Word32 where
    fromJSValUnchecked :: JSVal -> JSM Word32
fromJSValUnchecked = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. (RealFrac a, Integral b) => a -> b
round forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSValUnchecked #-}
    fromJSVal :: JSVal -> JSM (Maybe Word32)
fromJSVal = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (RealFrac a, Integral b) => a -> b
round) forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSVal #-}
instance FromJSVal Float where
    fromJSValUnchecked :: JSVal -> JSM Float
fromJSValUnchecked = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a b. (Real a, Fractional b) => a -> b
realToFrac forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSValUnchecked #-}
    fromJSVal :: JSVal -> JSM (Maybe Float)
fromJSVal = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (Real a, Fractional b) => a -> b
realToFrac) forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSVal #-}
instance FromJSVal Double where
    fromJSValUnchecked :: JSVal -> JSM Double
fromJSValUnchecked = JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSValUnchecked #-}
    fromJSVal :: JSVal -> JSM (Maybe Double)
fromJSVal = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSVal -> JSM Double
valueToNumber
    {-# INLINE fromJSVal #-}
instance FromJSVal AE.Value where
    fromJSVal :: JSVal -> JSM (Maybe Value)
fromJSVal JSVal
r = forall a. a -> Maybe a
Just forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> JSVal -> JSM Value
valueToJSONValue JSVal
r
    {-# INLINE fromJSVal #-}
instance (FromJSVal a, FromJSVal b) => FromJSVal (a,b) where
    fromJSVal :: JSVal -> JSM (Maybe (a, b))
fromJSVal JSVal
r = forall (m :: * -> *) a. MaybeT m a -> m (Maybe a)
runMaybeT forall a b. (a -> b) -> a -> b
$ (,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
0 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
1
    {-# INLINE fromJSVal #-}
instance (FromJSVal a, FromJSVal b, FromJSVal c) => FromJSVal (a,b,c) where
    fromJSVal :: JSVal -> JSM (Maybe (a, b, c))
fromJSVal JSVal
r = forall (m :: * -> *) a. MaybeT m a -> m (Maybe a)
runMaybeT forall a b. (a -> b) -> a -> b
$ (,,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
0 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
1 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
2
    {-# INLINE fromJSVal #-}
instance (FromJSVal a, FromJSVal b, FromJSVal c, FromJSVal d) => FromJSVal (a,b,c,d) where
    fromJSVal :: JSVal -> JSM (Maybe (a, b, c, d))
fromJSVal JSVal
r = forall (m :: * -> *) a. MaybeT m a -> m (Maybe a)
runMaybeT forall a b. (a -> b) -> a -> b
$ (,,,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
0 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
1 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
2 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
3
    {-# INLINE fromJSVal #-}
instance (FromJSVal a, FromJSVal b, FromJSVal c, FromJSVal d, FromJSVal e) => FromJSVal (a,b,c,d,e) where
    fromJSVal :: JSVal -> JSM (Maybe (a, b, c, d, e))
fromJSVal JSVal
r = forall (m :: * -> *) a. MaybeT m a -> m (Maybe a)
runMaybeT forall a b. (a -> b) -> a -> b
$ (,,,,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
0 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
1 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
2 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
3 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
4
    {-# INLINE fromJSVal #-}
instance (FromJSVal a, FromJSVal b, FromJSVal c, FromJSVal d, FromJSVal e, FromJSVal f) => FromJSVal (a,b,c,d,e,f) where
    fromJSVal :: JSVal -> JSM (Maybe (a, b, c, d, e, f))
fromJSVal JSVal
r = forall (m :: * -> *) a. MaybeT m a -> m (Maybe a)
runMaybeT forall a b. (a -> b) -> a -> b
$ (,,,,,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
0 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
1 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
2 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
3 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
4 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
5
    {-# INLINE fromJSVal #-}
instance (FromJSVal a, FromJSVal b, FromJSVal c, FromJSVal d, FromJSVal e, FromJSVal f, FromJSVal g) => FromJSVal (a,b,c,d,e,f,g) where
    fromJSVal :: JSVal -> JSM (Maybe (a, b, c, d, e, f, g))
fromJSVal JSVal
r = forall (m :: * -> *) a. MaybeT m a -> m (Maybe a)
runMaybeT forall a b. (a -> b) -> a -> b
$ (,,,,,,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
0 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
1 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
2 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
3 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
4 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
5 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
6
    {-# INLINE fromJSVal #-}
instance (FromJSVal a, FromJSVal b, FromJSVal c, FromJSVal d, FromJSVal e, FromJSVal f, FromJSVal g, FromJSVal h) => FromJSVal (a,b,c,d,e,f,g,h) where
    fromJSVal :: JSVal -> JSM (Maybe (a, b, c, d, e, f, g, h))
fromJSVal JSVal
r = forall (m :: * -> *) a. MaybeT m a -> m (Maybe a)
runMaybeT forall a b. (a -> b) -> a -> b
$ (,,,,,,,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
0 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
1 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
2 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
3 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
4 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
5 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
6 forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
7
    {-# INLINE fromJSVal #-}

jf :: FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf :: forall a. FromJSVal a => JSVal -> Int -> MaybeT JSM a
jf JSVal
r Int
n = forall (m :: * -> *) a. m (Maybe a) -> MaybeT m a
MaybeT forall a b. (a -> b) -> a -> b
$ do
  JSVal
r' <- forall (m :: MutabilityType (*)). Int -> SomeJSArray m -> JSM JSVal
A.read Int
n (forall s (m :: MutabilityType s). JSVal -> SomeJSArray m
SomeJSArray JSVal
r)
  forall a. GHCJSPure a -> JSM a
ghcjsPure (JSVal -> GHCJSPure Bool
isUndefined JSVal
r) forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
    Bool
True -> forall (m :: * -> *) a. Monad m => a -> m a
return forall a. Maybe a
Nothing
    Bool
False -> forall a. FromJSVal a => JSVal -> JSM (Maybe a)
fromJSVal JSVal
r'

instance (ToJSVal a, ToJSVal b) => ToJSVal (a,b) where
    toJSVal :: (a, b) -> JSM JSVal
toJSVal (a
a,b
b) = forall (m :: * -> *) a. Monad m => m (m a) -> m a
join forall a b. (a -> b) -> a -> b
$ JSVal -> JSVal -> JSM JSVal
arr2 forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. ToJSVal a => a -> JSM JSVal
toJSVal a
a forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal b
b
    {-# INLINE toJSVal #-}
instance (ToJSVal a, ToJSVal b, ToJSVal c) => ToJSVal (a,b,c) where
    toJSVal :: (a, b, c) -> JSM JSVal
toJSVal (a
a,b
b,c
c) = forall (m :: * -> *) a. Monad m => m (m a) -> m a
join forall a b. (a -> b) -> a -> b
$ JSVal -> JSVal -> JSVal -> JSM JSVal
arr3 forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. ToJSVal a => a -> JSM JSVal
toJSVal a
a forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal b
b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal c
c
    {-# INLINE toJSVal #-}
instance (ToJSVal a, ToJSVal b, ToJSVal c, ToJSVal d) => ToJSVal (a,b,c,d) where
    toJSVal :: (a, b, c, d) -> JSM JSVal
toJSVal (a
a,b
b,c
c,d
d) = forall (m :: * -> *) a. Monad m => m (m a) -> m a
join forall a b. (a -> b) -> a -> b
$ JSVal -> JSVal -> JSVal -> JSVal -> JSM JSVal
arr4 forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. ToJSVal a => a -> JSM JSVal
toJSVal a
a forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal b
b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal c
c forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal d
d
    {-# INLINE toJSVal #-}
instance (ToJSVal a, ToJSVal b, ToJSVal c, ToJSVal d, ToJSVal e) => ToJSVal (a,b,c,d,e) where
    toJSVal :: (a, b, c, d, e) -> JSM JSVal
toJSVal (a
a,b
b,c
c,d
d,e
e) = forall (m :: * -> *) a. Monad m => m (m a) -> m a
join forall a b. (a -> b) -> a -> b
$ JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSM JSVal
arr5 forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. ToJSVal a => a -> JSM JSVal
toJSVal a
a forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal b
b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal c
c forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal d
d forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal e
e
    {-# INLINE toJSVal #-}
instance (ToJSVal a, ToJSVal b, ToJSVal c, ToJSVal d, ToJSVal e, ToJSVal f) => ToJSVal (a,b,c,d,e,f) where
    toJSVal :: (a, b, c, d, e, f) -> JSM JSVal
toJSVal (a
a,b
b,c
c,d
d,e
e,f
f) = forall (m :: * -> *) a. Monad m => m (m a) -> m a
join forall a b. (a -> b) -> a -> b
$ JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSM JSVal
arr6 forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. ToJSVal a => a -> JSM JSVal
toJSVal a
a forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal b
b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal c
c forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal d
d forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal e
e forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal f
f
    {-# INLINE toJSVal #-}
instance (ToJSVal a, ToJSVal b, ToJSVal c, ToJSVal d, ToJSVal e, ToJSVal f, ToJSVal g) => ToJSVal (a,b,c,d,e,f,g) where
    toJSVal :: (a, b, c, d, e, f, g) -> JSM JSVal
toJSVal (a
a,b
b,c
c,d
d,e
e,f
f,g
g) = forall (m :: * -> *) a. Monad m => m (m a) -> m a
join forall a b. (a -> b) -> a -> b
$ JSVal
-> JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSM JSVal
arr7 forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. ToJSVal a => a -> JSM JSVal
toJSVal a
a forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal b
b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal c
c forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal d
d forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal e
e forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal f
f forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. ToJSVal a => a -> JSM JSVal
toJSVal g
g
    {-# INLINE toJSVal #-}

arr2 :: JSVal -> JSVal -> JSM JSVal
arr2 :: JSVal -> JSVal -> JSM JSVal
arr2 JSVal
a JSVal
b           = coerce :: forall a b. Coercible a b => a -> b
coerce forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: MutabilityType (*)). [JSVal] -> JSM (SomeJSArray m)
fromListIO [JSVal
a,JSVal
b]
arr3 :: JSVal -> JSVal -> JSVal -> JSM JSVal
arr3 :: JSVal -> JSVal -> JSVal -> JSM JSVal
arr3 JSVal
a JSVal
b JSVal
c         = coerce :: forall a b. Coercible a b => a -> b
coerce forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: MutabilityType (*)). [JSVal] -> JSM (SomeJSArray m)
fromListIO [JSVal
a,JSVal
b,JSVal
c]
arr4 :: JSVal -> JSVal -> JSVal -> JSVal -> JSM JSVal
arr4 :: JSVal -> JSVal -> JSVal -> JSVal -> JSM JSVal
arr4 JSVal
a JSVal
b JSVal
c JSVal
d       = coerce :: forall a b. Coercible a b => a -> b
coerce forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: MutabilityType (*)). [JSVal] -> JSM (SomeJSArray m)
fromListIO [JSVal
a,JSVal
b,JSVal
c,JSVal
d]
arr5 :: JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSM JSVal
arr5 :: JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSM JSVal
arr5 JSVal
a JSVal
b JSVal
c JSVal
d JSVal
e     = coerce :: forall a b. Coercible a b => a -> b
coerce forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: MutabilityType (*)). [JSVal] -> JSM (SomeJSArray m)
fromListIO [JSVal
a,JSVal
b,JSVal
c,JSVal
d,JSVal
e]
arr6 :: JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSM JSVal
arr6 :: JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSM JSVal
arr6 JSVal
a JSVal
b JSVal
c JSVal
d JSVal
e JSVal
f   = coerce :: forall a b. Coercible a b => a -> b
coerce forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: MutabilityType (*)). [JSVal] -> JSM (SomeJSArray m)
fromListIO [JSVal
a,JSVal
b,JSVal
c,JSVal
d,JSVal
e,JSVal
f]
arr7 :: JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSM JSVal
arr7 :: JSVal
-> JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSVal -> JSM JSVal
arr7 JSVal
a JSVal
b JSVal
c JSVal
d JSVal
e JSVal
f JSVal
g = coerce :: forall a b. Coercible a b => a -> b
coerce forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: MutabilityType (*)). [JSVal] -> JSM (SomeJSArray m)
fromListIO [JSVal
a,JSVal
b,JSVal
c,JSVal
d,JSVal
e,JSVal
f,JSVal
g]

toJSVal_aeson :: AE.ToJSON a => a -> JSM JSVal
toJSVal_aeson :: forall a. ToJSON a => a -> JSM JSVal
toJSVal_aeson = Value -> JSM JSVal
jsonValueToValue forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. ToJSON a => a -> Value
AE.toJSON