{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
-----------------------------------------------------------------------------
--
-- Module      :  Language.Javascript.JSaddle.Arguments
-- Copyright   :  (c) Hamish Mackenzie
-- License     :  MIT
--
-- Maintainer  :  Hamish Mackenzie <Hamish.K.Mackenzie@googlemail.com>
--
-- |
--
-----------------------------------------------------------------------------

module Language.Javascript.JSaddle.Arguments (
    MakeArgs(..)
) where

import Language.Javascript.JSaddle.Classes (MakeArgs(..))
import GHCJS.Marshal.Internal (ToJSVal(..))

instance ToJSVal arg => MakeArgs [arg] where
    makeArgs :: [arg] -> JSM [JSVal]
makeArgs = (arg -> JSM JSVal) -> [arg] -> JSM [JSVal]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM arg -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal

instance (ToJSVal arg1, ToJSVal arg2) => MakeArgs (arg1, arg2) where
    makeArgs :: (arg1, arg2) -> JSM [JSVal]
makeArgs (arg1
arg1, arg2
arg2) = do
        JSVal
rarg1 <- arg1 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg1
arg1
        JSVal
rarg2 <- arg2 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg2
arg2
        [JSVal] -> JSM [JSVal]
forall (m :: * -> *) a. Monad m => a -> m a
return [JSVal
rarg1, JSVal
rarg2]

instance (ToJSVal arg1, ToJSVal arg2, ToJSVal arg3) => MakeArgs (arg1, arg2, arg3) where
    makeArgs :: (arg1, arg2, arg3) -> JSM [JSVal]
makeArgs (arg1
arg1, arg2
arg2, arg3
arg3) = do
        JSVal
rarg1 <- arg1 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg1
arg1
        JSVal
rarg2 <- arg2 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg2
arg2
        JSVal
rarg3 <- arg3 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg3
arg3
        [JSVal] -> JSM [JSVal]
forall (m :: * -> *) a. Monad m => a -> m a
return [JSVal
rarg1, JSVal
rarg2, JSVal
rarg3]

instance (ToJSVal arg1, ToJSVal arg2, ToJSVal arg3, ToJSVal arg4) => MakeArgs (arg1, arg2, arg3, arg4) where
    makeArgs :: (arg1, arg2, arg3, arg4) -> JSM [JSVal]
makeArgs (arg1
arg1, arg2
arg2, arg3
arg3, arg4
arg4) = do
        JSVal
rarg1 <- arg1 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg1
arg1
        JSVal
rarg2 <- arg2 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg2
arg2
        JSVal
rarg3 <- arg3 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg3
arg3
        JSVal
rarg4 <- arg4 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg4
arg4
        [JSVal] -> JSM [JSVal]
forall (m :: * -> *) a. Monad m => a -> m a
return [JSVal
rarg1, JSVal
rarg2, JSVal
rarg3, JSVal
rarg4]

instance (ToJSVal arg1, ToJSVal arg2, ToJSVal arg3, ToJSVal arg4, ToJSVal arg5) => MakeArgs (arg1, arg2, arg3, arg4, arg5) where
    makeArgs :: (arg1, arg2, arg3, arg4, arg5) -> JSM [JSVal]
makeArgs (arg1
arg1, arg2
arg2, arg3
arg3, arg4
arg4, arg5
arg5) = do
        JSVal
rarg1 <- arg1 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg1
arg1
        JSVal
rarg2 <- arg2 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg2
arg2
        JSVal
rarg3 <- arg3 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg3
arg3
        JSVal
rarg4 <- arg4 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg4
arg4
        JSVal
rarg5 <- arg5 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg5
arg5
        [JSVal] -> JSM [JSVal]
forall (m :: * -> *) a. Monad m => a -> m a
return [JSVal
rarg1, JSVal
rarg2, JSVal
rarg3, JSVal
rarg4, JSVal
rarg5]

instance (ToJSVal arg1, ToJSVal arg2, ToJSVal arg3, ToJSVal arg4, ToJSVal arg5, ToJSVal arg6) => MakeArgs (arg1, arg2, arg3, arg4, arg5, arg6) where
    makeArgs :: (arg1, arg2, arg3, arg4, arg5, arg6) -> JSM [JSVal]
makeArgs (arg1
arg1, arg2
arg2, arg3
arg3, arg4
arg4, arg5
arg5, arg6
arg6) = do
        JSVal
rarg1 <- arg1 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg1
arg1
        JSVal
rarg2 <- arg2 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg2
arg2
        JSVal
rarg3 <- arg3 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg3
arg3
        JSVal
rarg4 <- arg4 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg4
arg4
        JSVal
rarg5 <- arg5 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg5
arg5
        JSVal
rarg6 <- arg6 -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal arg6
arg6
        [JSVal] -> JSM [JSVal]
forall (m :: * -> *) a. Monad m => a -> m a
return [JSVal
rarg1, JSVal
rarg2, JSVal
rarg3, JSVal
rarg4, JSVal
rarg5, JSVal
rarg6]