content: {-# 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 = mapM toJSVal
  
  instance (ToJSVal arg1, ToJSVal arg2) => MakeArgs (arg1, arg2) where
      makeArgs (arg1, arg2) = do
          rarg1 <- toJSVal arg1
          rarg2 <- toJSVal arg2
          return [rarg1, rarg2]
  
  instance (ToJSVal arg1, ToJSVal arg2, ToJSVal arg3) => MakeArgs (arg1, arg2, arg3) where
      makeArgs (arg1, arg2, arg3) = do
          rarg1 <- toJSVal arg1
          rarg2 <- toJSVal arg2
          rarg3 <- toJSVal arg3
          return [rarg1, rarg2, rarg3]
  
  instance (ToJSVal arg1, ToJSVal arg2, ToJSVal arg3, ToJSVal arg4) => MakeArgs (arg1, arg2, arg3, arg4) where
      makeArgs (arg1, arg2, arg3, arg4) = do
          rarg1 <- toJSVal arg1
          rarg2 <- toJSVal arg2
          rarg3 <- toJSVal arg3
          rarg4 <- toJSVal arg4
          return [rarg1, rarg2, rarg3, 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) = do
          rarg1 <- toJSVal arg1
          rarg2 <- toJSVal arg2
          rarg3 <- toJSVal arg3
          rarg4 <- toJSVal arg4
          rarg5 <- toJSVal arg5
          return [rarg1, rarg2, rarg3, rarg4, 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) = do
          rarg1 <- toJSVal arg1
          rarg2 <- toJSVal arg2
          rarg3 <- toJSVal arg3
          rarg4 <- toJSVal arg4
          rarg5 <- toJSVal arg5
          rarg6 <- toJSVal arg6
          return [rarg1, rarg2, rarg3, rarg4, rarg5, rarg6]
  
  