summaryrefslogtreecommitdiff
path: root/libraries
diff options
context:
space:
mode:
Diffstat (limited to 'libraries')
m---------libraries/array0
-rw-r--r--libraries/base/Control/Concurrent.hs35
-rw-r--r--libraries/base/GHC/Conc/IO.hs34
-rw-r--r--libraries/base/GHC/Conc/Windows.hs5
-rw-r--r--libraries/base/GHC/Event.hs5
-rw-r--r--libraries/base/GHC/Event/Thread.hs8
-rw-r--r--libraries/base/GHC/Event/TimerManager.hs5
-rw-r--r--libraries/base/GHC/IO/Encoding.hs6
-rw-r--r--libraries/base/GHC/IO/Encoding/CodePage/API.hs6
-rw-r--r--libraries/base/GHC/IO/FD.hs33
-rw-r--r--libraries/base/GHC/JS/Prim.hs332
-rw-r--r--libraries/base/GHC/JS/Prim/Internal.hs56
-rw-r--r--libraries/base/GHC/JS/Prim/Internal/Build.hs1470
-rw-r--r--libraries/base/GHC/Stack/CCS.hsc17
-rw-r--r--libraries/base/GHC/TopHandler.hs9
-rw-r--r--libraries/base/GHC/Windows.hs6
-rw-r--r--libraries/base/System/CPUTime.hsc3
-rw-r--r--libraries/base/System/CPUTime/Javascript.hs26
-rw-r--r--libraries/base/System/Environment.hs2
-rw-r--r--libraries/base/System/Environment/ExecutablePath.hsc11
-rw-r--r--libraries/base/System/Posix/Internals.hs185
-rw-r--r--libraries/base/System/Timeout.hs4
-rw-r--r--libraries/base/base.cabal45
-rw-r--r--libraries/base/jsbits/base.js839
-rw-r--r--libraries/base/jsbits/errno.js102
-rw-r--r--libraries/base/jsbits/platform.js111
-rw-r--r--libraries/base/tests/Concurrent/all.T2
-rw-r--r--libraries/base/tests/IO/T21336/all.T8
-rw-r--r--libraries/base/tests/IO/all.T36
-rw-r--r--libraries/base/tests/System/all.T4
-rw-r--r--libraries/base/tests/all.T45
-rw-r--r--libraries/ghc-boot-th/GHC/ForeignSrcLang/Type.hs1
-rw-r--r--libraries/ghc-boot/GHC/Data/ShortText.hs5
-rw-r--r--libraries/ghc-compact/tests/all.T5
-rw-r--r--libraries/ghc-heap/ghc-heap.cabal.in3
-rw-r--r--libraries/ghc-heap/tests/all.T2
-rw-r--r--libraries/ghc-prim/ghc-prim.cabal27
-rw-r--r--libraries/ghci/GHCi/CreateBCO.hs6
-rw-r--r--libraries/ghci/GHCi/FFI.hsc41
-rw-r--r--libraries/template-haskell/Language/Haskell/TH/Syntax.hs1
40 files changed, 3425 insertions, 116 deletions
diff --git a/libraries/array b/libraries/array
-Subproject 77990b2132ba688f6282822891da2b9455e33c2
+Subproject acd92ba77c205a039d9c6eaabb3e35d09e33016
diff --git a/libraries/base/Control/Concurrent.hs b/libraries/base/Control/Concurrent.hs
index 1bf020b8a9..87ddc9584a 100644
--- a/libraries/base/Control/Concurrent.hs
+++ b/libraries/base/Control/Concurrent.hs
@@ -105,17 +105,25 @@ module Control.Concurrent (
) where
+-- JavaScript platform doesn't support bound threads
+#if !defined(js_HOST_ARCH)
+#define SUPPORT_BOUND_THREADS
+#endif
+
import Control.Exception.Base as Exception
import GHC.Conc hiding (threadWaitRead, threadWaitWrite,
threadWaitReadSTM, threadWaitWriteSTM)
+
+#if defined(SUPPORT_BOUND_THREADS)
import GHC.IO ( unsafeUnmask, catchException )
import GHC.IORef ( newIORef, readIORef, writeIORef )
import GHC.Base
-
-import System.Posix.Types ( Fd )
import Foreign.StablePtr
import Foreign.C.Types
+#endif
+
+import System.Posix.Types ( Fd )
#if defined(mingw32_HOST_OS)
import Foreign.C
@@ -250,6 +258,27 @@ waiting for the results in the main thread.
-}
+#if !defined(SUPPORT_BOUND_THREADS)
+forkOS :: IO () -> IO ThreadId
+forkOS _ = error "forkOS not supported on this architecture"
+
+forkOSWithUnmask :: ((forall a . IO a -> IO a) -> IO ()) -> IO ThreadId
+forkOSWithUnmask _ = error "forkOS not supported on this architecture"
+
+isCurrentThreadBound :: IO Bool
+isCurrentThreadBound = pure False
+
+runInBoundThread :: IO a -> IO a
+runInBoundThread action = action
+
+runInUnboundThread :: IO a -> IO a
+runInUnboundThread action = action
+
+rtsSupportsBoundThreads :: Bool
+rtsSupportsBoundThreads = False
+#else
+
+
-- | 'True' if bound threads are supported.
-- If @rtsSupportsBoundThreads@ is 'False', 'isCurrentThreadBound'
-- will always return 'False' and both 'forkOS' and 'runInBoundThread' will
@@ -390,6 +419,8 @@ runInUnboundThread action = do
unsafeResult :: Either SomeException a -> IO a
unsafeResult = either Exception.throwIO return
+#endif
+
-- ---------------------------------------------------------------------------
-- threadWaitRead/threadWaitWrite
diff --git a/libraries/base/GHC/Conc/IO.hs b/libraries/base/GHC/Conc/IO.hs
index 344a688d28..869847e77a 100644
--- a/libraries/base/GHC/Conc/IO.hs
+++ b/libraries/base/GHC/Conc/IO.hs
@@ -65,12 +65,14 @@ import GHC.IO.SubSystem
import GHC.Conc.Windows (asyncRead, asyncWrite, asyncDoProc, asyncReadBA,
asyncWriteBA, ConsoleEvent(..), win32ConsoleHandler,
toWin32ConsoleEvent)
-#else
+#elif !defined(js_HOST_ARCH)
import qualified GHC.Event.Thread as Event
#endif
ensureIOManagerIsRunning :: IO ()
-#if !defined(mingw32_HOST_OS)
+#if defined(js_HOST_ARCH)
+ensureIOManagerIsRunning = pure ()
+#elif !defined(mingw32_HOST_OS)
ensureIOManagerIsRunning = Event.ensureIOManagerIsRunning
#else
ensureIOManagerIsRunning = Windows.ensureIOManagerIsRunning
@@ -89,7 +91,7 @@ interruptIOManager = Windows.interruptIOManager
#endif
ioManagerCapabilitiesChanged :: IO ()
-#if !defined(mingw32_HOST_OS)
+#if !defined(mingw32_HOST_OS) && !defined(js_HOST_ARCH)
ioManagerCapabilitiesChanged = Event.ioManagerCapabilitiesChanged
#else
ioManagerCapabilitiesChanged = return ()
@@ -103,7 +105,7 @@ ioManagerCapabilitiesChanged = return ()
-- that has been used with 'threadWaitRead', use 'closeFdWith'.
threadWaitRead :: Fd -> IO ()
threadWaitRead fd
-#if !defined(mingw32_HOST_OS)
+#if !defined(mingw32_HOST_OS) && !defined(js_HOST_ARCH)
| threaded = Event.threadWaitRead fd
#endif
| otherwise = IO $ \s ->
@@ -119,7 +121,7 @@ threadWaitRead fd
-- that has been used with 'threadWaitWrite', use 'closeFdWith'.
threadWaitWrite :: Fd -> IO ()
threadWaitWrite fd
-#if !defined(mingw32_HOST_OS)
+#if !defined(mingw32_HOST_OS) && !defined(js_HOST_ARCH)
| threaded = Event.threadWaitWrite fd
#endif
| otherwise = IO $ \s ->
@@ -133,7 +135,7 @@ threadWaitWrite fd
-- in the file descriptor.
threadWaitReadSTM :: Fd -> IO (Sync.STM (), IO ())
threadWaitReadSTM fd
-#if !defined(mingw32_HOST_OS)
+#if !defined(mingw32_HOST_OS) && !defined(js_HOST_ARCH)
| threaded = Event.threadWaitReadSTM fd
#endif
| otherwise = do
@@ -152,7 +154,7 @@ threadWaitReadSTM fd
-- in the file descriptor.
threadWaitWriteSTM :: Fd -> IO (Sync.STM (), IO ())
threadWaitWriteSTM fd
-#if !defined(mingw32_HOST_OS)
+#if !defined(mingw32_HOST_OS) && !defined(js_HOST_ARCH)
| threaded = Event.threadWaitWriteSTM fd
#endif
| otherwise = do
@@ -177,7 +179,7 @@ closeFdWith :: (Fd -> IO ()) -- ^ Low-level action that performs the real close.
-> Fd -- ^ File descriptor to close.
-> IO ()
closeFdWith close fd
-#if !defined(mingw32_HOST_OS)
+#if !defined(mingw32_HOST_OS) && !defined(js_HOST_ARCH)
| threaded = Event.closeFdWith close fd
#endif
| otherwise = close fd
@@ -197,8 +199,8 @@ threadDelay time
#if defined(mingw32_HOST_OS)
| isWindowsNativeIO = Windows.threadDelay time
| threaded = Windows.threadDelay time
-#else
- | threaded = Event.threadDelay time
+#elif !defined(js_HOST_ARCH)
+ | threaded = Event.threadDelay time
#endif
| otherwise = IO $ \s ->
case time of { I# time# ->
@@ -213,13 +215,15 @@ threadDelay time
-- 2147483647 μs, less than 36 minutes.
--
registerDelay :: Int -> IO (TVar Bool)
-registerDelay usecs
+registerDelay _usecs
#if defined(mingw32_HOST_OS)
- | isWindowsNativeIO = Windows.registerDelay usecs
- | threaded = Windows.registerDelay usecs
-#else
- | threaded = Event.registerDelay usecs
+ | isWindowsNativeIO = Windows.registerDelay _usecs
+ | threaded = Windows.registerDelay _usecs
+#elif !defined(js_HOST_ARCH)
+ | threaded = Event.registerDelay _usecs
#endif
| otherwise = errorWithoutStackTrace "registerDelay: requires -threaded"
+#if !defined(js_HOST_ARCH)
foreign import ccall unsafe "rtsSupportsBoundThreads" threaded :: Bool
+#endif
diff --git a/libraries/base/GHC/Conc/Windows.hs b/libraries/base/GHC/Conc/Windows.hs
index 50b91aaa45..e9733806e7 100644
--- a/libraries/base/GHC/Conc/Windows.hs
+++ b/libraries/base/GHC/Conc/Windows.hs
@@ -19,6 +19,9 @@
-- #not-home
module GHC.Conc.Windows
+#if defined(js_HOST_ARCH)
+ () where
+#else
( ensureIOManagerIsRunning
, interruptIOManager
@@ -117,4 +120,4 @@ ensureIOManagerIsRunning = POSIX.ensureIOManagerIsRunning
interruptIOManager :: IO ()
interruptIOManager = POSIX.interruptIOManager <!> WINIO.interruptIOManager
-
+#endif
diff --git a/libraries/base/GHC/Event.hs b/libraries/base/GHC/Event.hs
index 9f1d3dfd73..a9acda5516 100644
--- a/libraries/base/GHC/Event.hs
+++ b/libraries/base/GHC/Event.hs
@@ -1,5 +1,6 @@
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE CPP #-}
-- ----------------------------------------------------------------------------
-- | This module provides scalable event notification for file
@@ -10,6 +11,9 @@
-- ----------------------------------------------------------------------------
module GHC.Event
+#if defined(js_HOST_ARCH)
+ ( ) where
+#else
( -- * Types
EventManager
, TimerManager
@@ -44,3 +48,4 @@ import GHC.Event.TimerManager (TimeoutCallback, TimeoutKey, registerTimeout,
updateTimeout, unregisterTimeout, TimerManager)
import GHC.Event.Thread (getSystemEventManager, getSystemTimerManager)
+#endif
diff --git a/libraries/base/GHC/Event/Thread.hs b/libraries/base/GHC/Event/Thread.hs
index 7e7b215f24..f76e9147da 100644
--- a/libraries/base/GHC/Event/Thread.hs
+++ b/libraries/base/GHC/Event/Thread.hs
@@ -2,7 +2,12 @@
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE BangPatterns, NoImplicitPrelude #-}
+#include <ghcplatform.h>
+
module GHC.Event.Thread
+#if defined(js_HOST_ARCH)
+ ( ) where
+#else
( getSystemEventManager
, getSystemTimerManager
, ensureIOManagerIsRunning
@@ -17,7 +22,6 @@ module GHC.Event.Thread
, blockedOnBadFD -- used by RTS
) where
-#include <ghcplatform.h>
-- TODO: Use new Windows I/O manager
import Control.Exception (finally, SomeException, toException)
@@ -439,3 +443,5 @@ foreign import ccall unsafe "setIOManagerControlFd"
foreign import ccall unsafe "setTimerManagerControlFd"
c_setTimerManagerControlFd :: CInt -> IO ()
#endif
+
+#endif
diff --git a/libraries/base/GHC/Event/TimerManager.hs b/libraries/base/GHC/Event/TimerManager.hs
index 508b9e0a0a..bb26741d58 100644
--- a/libraries/base/GHC/Event/TimerManager.hs
+++ b/libraries/base/GHC/Event/TimerManager.hs
@@ -7,6 +7,9 @@
-- TODO: use the new Windows IO manager
module GHC.Event.TimerManager
+#if defined(js_HOST_ARCH)
+ () where
+#else
( -- * Types
TimerManager
@@ -261,3 +264,5 @@ editTimeouts mgr g = do
-- minimum element didn't change.
t0 /= t1
_ -> True
+
+#endif
diff --git a/libraries/base/GHC/IO/Encoding.hs b/libraries/base/GHC/IO/Encoding.hs
index a7162f565b..ea738c56a4 100644
--- a/libraries/base/GHC/IO/Encoding.hs
+++ b/libraries/base/GHC/IO/Encoding.hs
@@ -180,7 +180,11 @@ initLocaleEncoding, initFileSystemEncoding, initForeignEncoding :: TextEncoding
-- N.B. initLocaleEncoding is exported for use in System.IO.localeEncoding.
-- NOINLINE ensures that this result is shared.
-#if !defined(mingw32_HOST_OS)
+#if defined(js_HOST_ARCH)
+initLocaleEncoding = utf8
+initFileSystemEncoding = utf8
+initForeignEncoding = utf8
+#elif !defined(mingw32_HOST_OS)
-- It is rather important that we don't just call Iconv.mkIconvEncoding here
-- because some iconvs (in particular GNU iconv) will brokenly UTF-8 encode
-- lone surrogates without complaint.
diff --git a/libraries/base/GHC/IO/Encoding/CodePage/API.hs b/libraries/base/GHC/IO/Encoding/CodePage/API.hs
index 41bc8d0f07..ef6bebd002 100644
--- a/libraries/base/GHC/IO/Encoding/CodePage/API.hs
+++ b/libraries/base/GHC/IO/Encoding/CodePage/API.hs
@@ -32,6 +32,10 @@ import GHC.ForeignPtr (castForeignPtr)
import System.Posix.Internals
+#if defined(js_HOST_ARCH)
+mkCodePageEncoding :: String
+mkCodePageEncoding = ""
+#else
c_DEBUG_DUMP :: Bool
c_DEBUG_DUMP = False
@@ -422,3 +426,5 @@ cpRecode try' is_valid_prefix max_i_size min_o_size iscale oscale = go
-- Must have interpreted all given bytes successfully
-- We need to iterate until we have consumed the complete contents of the buffer
Right wrote_elts -> go (bufferRemove n ibuf) (obuf { bufR = bufR obuf + wrote_elts })
+
+#endif
diff --git a/libraries/base/GHC/IO/FD.hs b/libraries/base/GHC/IO/FD.hs
index 951a3ebecc..2886658a5c 100644
--- a/libraries/base/GHC/IO/FD.hs
+++ b/libraries/base/GHC/IO/FD.hs
@@ -570,6 +570,10 @@ indicates that there's no data, we call threadWaitRead.
readRawBufferPtr :: String -> FD -> Ptr Word8 -> Int -> CSize -> IO Int
readRawBufferPtr loc !fd !buf !off !len
+#if defined(js_HOST_ARCH)
+ = fmap fromIntegral . uninterruptibleMask_ $
+ throwErrnoIfMinus1 loc (c_read (fdFD fd) (buf `plusPtr` off) len)
+#else
| isNonBlocking fd = unsafe_read -- unsafe is ok, it can't block
| otherwise = do r <- throwErrnoIfMinus1 loc
(unsafe_fdReady (fdFD fd) 0 0 0)
@@ -583,10 +587,19 @@ readRawBufferPtr loc !fd !buf !off !len
read = if threaded then safe_read else unsafe_read
unsafe_read = do_read (c_read (fdFD fd) (buf `plusPtr` off) len)
safe_read = do_read (c_safe_read (fdFD fd) (buf `plusPtr` off) len)
+#endif
-- return: -1 indicates EOF, >=0 is bytes read
readRawBufferPtrNoBlock :: String -> FD -> Ptr Word8 -> Int -> CSize -> IO Int
readRawBufferPtrNoBlock loc !fd !buf !off !len
+#if defined(js_HOST_ARCH)
+ = uninterruptibleMask_ $ do
+ r <- throwErrnoIfMinus1 loc (c_read (fdFD fd) (buf `plusPtr` off) len)
+ case r of
+ (-1) -> return 0
+ 0 -> return (-1)
+ n -> return (fromIntegral n)
+#else
| isNonBlocking fd = unsafe_read -- unsafe is ok, it can't block
| otherwise = do r <- unsafe_fdReady (fdFD fd) 0 0 0
if r /= 0 then safe_read
@@ -600,9 +613,14 @@ readRawBufferPtrNoBlock loc !fd !buf !off !len
n -> return (fromIntegral n)
unsafe_read = do_read (c_read (fdFD fd) (buf `plusPtr` off) len)
safe_read = do_read (c_safe_read (fdFD fd) (buf `plusPtr` off) len)
+#endif
writeRawBufferPtr :: String -> FD -> Ptr Word8 -> Int -> CSize -> IO CInt
writeRawBufferPtr loc !fd !buf !off !len
+#if defined(js_HOST_ARCH)
+ = fmap fromIntegral . uninterruptibleMask_ $
+ throwErrnoIfMinus1 loc (c_write (fdFD fd) (buf `plusPtr` off) len)
+#else
| isNonBlocking fd = unsafe_write -- unsafe is ok, it can't block
| otherwise = do r <- unsafe_fdReady (fdFD fd) 1 0 0
if r /= 0
@@ -615,9 +633,17 @@ writeRawBufferPtr loc !fd !buf !off !len
write = if threaded then safe_write else unsafe_write
unsafe_write = do_write (c_write (fdFD fd) (buf `plusPtr` off) len)
safe_write = do_write (c_safe_write (fdFD fd) (buf `plusPtr` off) len)
+#endif
writeRawBufferPtrNoBlock :: String -> FD -> Ptr Word8 -> Int -> CSize -> IO CInt
writeRawBufferPtrNoBlock loc !fd !buf !off !len
+#if defined(js_HOST_ARCH)
+ = uninterruptibleMask_ $ do
+ r <- throwErrnoIfMinus1 loc (c_write (fdFD fd) (buf `plusPtr` off) len)
+ case r of
+ (-1) -> return 0
+ n -> return (fromIntegral n)
+#else
| isNonBlocking fd = unsafe_write -- unsafe is ok, it can't block
| otherwise = do r <- unsafe_fdReady (fdFD fd) 1 0 0
if r /= 0 then write
@@ -630,12 +656,15 @@ writeRawBufferPtrNoBlock loc !fd !buf !off !len
write = if threaded then safe_write else unsafe_write
unsafe_write = do_write (c_write (fdFD fd) (buf `plusPtr` off) len)
safe_write = do_write (c_safe_write (fdFD fd) (buf `plusPtr` off) len)
+#endif
+#if !defined(js_HOST_ARCH)
isNonBlocking :: FD -> Bool
isNonBlocking fd = fdIsNonBlocking fd /= 0
foreign import ccall unsafe "fdReady"
unsafe_fdReady :: CInt -> CBool -> Int64 -> CBool -> IO CInt
+#endif
#else /* mingw32_HOST_OS.... */
@@ -725,12 +754,14 @@ foreign import WINDOWS_CCONV safe "send"
#endif
+#if !defined(js_HOST_ARCH)
foreign import ccall unsafe "rtsSupportsBoundThreads" threaded :: Bool
+#endif
-- -----------------------------------------------------------------------------
-- utils
-#if !defined(mingw32_HOST_OS)
+#if !defined(mingw32_HOST_OS) && !defined(js_HOST_ARCH)
throwErrnoIfMinus1RetryOnBlock :: String -> IO CSsize -> IO CSsize -> IO CSsize
throwErrnoIfMinus1RetryOnBlock loc f on_block =
do
diff --git a/libraries/base/GHC/JS/Prim.hs b/libraries/base/GHC/JS/Prim.hs
new file mode 100644
index 0000000000..4a9505cbdf
--- /dev/null
+++ b/libraries/base/GHC/JS/Prim.hs
@@ -0,0 +1,332 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE MagicHash #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE JavaScriptFFI #-}
+{-# LANGUAGE GHCForeignImportPrim #-}
+{-# LANGUAGE UnliftedFFITypes #-}
+{-# LANGUAGE UnboxedTuples #-}
+
+module GHC.JS.Prim ( JSVal(..), JSVal#
+ , JSException(..)
+ , WouldBlockException(..)
+#if defined(js_HOST_ARCH)
+ , toIO
+ , resolve
+ , resolveIO
+ , mkJSException
+ , fromJSString
+ , toJSString
+ , toJSArray
+ , fromJSArray
+ , fromJSInt
+ , toJSInt
+ , isNull
+ , isUndefined
+ , jsNull
+ , getProp
+ , getProp'
+ , getProp#
+ , unsafeGetProp
+ , unsafeGetProp'
+ , unsafeGetProp#
+ , unpackJSString#
+ , unpackJSStringUtf8#
+ , unsafeUnpackJSString#
+ , unsafeUnpackJSStringUtf8#
+ , unpackJSStringUtf8##
+ , unsafeUnpackJSStringUtf8##
+
+#endif
+ ) where
+
+import Data.Typeable (Typeable)
+import Unsafe.Coerce (unsafeCoerce)
+
+import GHC.Prim
+import qualified GHC.Exception as Ex
+import qualified GHC.Exts as Exts
+import qualified GHC.CString as GHC
+import GHC.IO
+
+{-
+ JSVal is a boxed type that can be used as FFI
+ argument or result.
+-}
+
+#if defined(js_HOST_ARCH)
+data JSVal = JSVal ByteArray#
+type JSVal# = ByteArray#
+#else
+data JSVal = JSVal Addr#
+type JSVal# = Addr#
+#endif
+
+{-
+ When a JavaScript exception is raised inside
+ a safe or interruptible foreign call, it is converted
+ to a JSException
+ -}
+data JSException = JSException JSVal String
+ deriving (Typeable)
+
+instance Ex.Exception JSException
+
+instance Show JSException where
+ show (JSException _ xs) = "JavaScript exception: " ++ xs
+
+#if defined(js_HOST_ARCH)
+
+{-# NOINLINE toIO #-}
+toIO :: Exts.Any -> IO Exts.Any
+toIO x = pure x
+
+{-# NOINLINE resolve #-}
+resolve :: JSVal# -> JSVal# -> Exts.Any -> IO ()
+resolve accept reject x = resolveIO accept reject (pure x)
+
+{-# NOINLINE resolveIO #-}
+resolveIO :: JSVal# -> JSVal# -> IO Exts.Any -> IO ()
+resolveIO accept reject x =
+ (x >>= evaluate >>= js_callback_any accept) `catch`
+ (\(e::Ex.SomeException) -> do
+ exceptionText <- evaluate (toJSString $ Ex.displayException e) `catch`
+ (\(_::Ex.SomeException) -> evaluate (toJSString "unknown exception"))
+ js_callback_jsval reject exceptionText)
+
+mkJSException :: JSVal -> IO JSException
+mkJSException ref =
+ return (JSException (unsafeCoerce ref) (fromJSString ref))
+
+{- | Low-level conversion utilities for packages that cannot
+ depend on ghcjs-base
+ -}
+
+{- | returns an empty string if the JSVal does not contain
+ a string
+ -}
+fromJSString :: JSVal -> String
+fromJSString = unsafeCoerce . js_fromJSString
+{-# INLINE fromJSString #-}
+
+toJSString :: String -> JSVal
+toJSString = js_toJSString . unsafeCoerce . seqList
+{-# INLINE [0] toJSString #-}
+{-# RULES
+"GHC.JS.PRIM toJSString/literal" forall a.
+ toJSString (GHC.unpackCString# a) = JSVal (unsafeUnpackJSStringUtf8## a)
+"GHC.JS.PRIM toJSString/literalUtf8" forall a.
+ toJSString (GHC.unpackCStringUtf8# a) = JSVal (unsafeUnpackJSStringUtf8## a)
+ #-}
+
+fromJSArray :: JSVal -> IO [JSVal]
+fromJSArray = unsafeCoerce . js_fromJSArray
+{-# INLINE fromJSArray #-}
+
+toJSArray :: [JSVal] -> IO JSVal
+toJSArray = js_toJSArray . unsafeCoerce . seqList
+{-# INLINE toJSArray #-}
+
+{- | returns zero if the JSVal does not contain a number
+ -}
+fromJSInt :: JSVal -> Int
+fromJSInt = js_fromJSInt
+{-# INLINE fromJSInt #-}
+
+toJSInt :: Int -> JSVal
+toJSInt = js_toJSInt
+{-# INLINE toJSInt #-}
+
+isNull :: JSVal -> Bool
+isNull = js_isNull
+{-# INLINE isNull #-}
+
+isUndefined :: JSVal -> Bool
+isUndefined = js_isUndefined
+{-# INLINE isUndefined #-}
+
+jsNull :: JSVal
+jsNull = js_null
+{-# INLINE CONLIKE jsNull #-}
+
+getProp :: JSVal -> String -> IO JSVal
+getProp o p = js_getProp o (unsafeCoerce $ seqList p)
+{-# INLINE [0] getProp #-}
+{-# RULES
+"GHC.JS.PRIM getProp/literal" forall o a.
+ getProp o (GHC.unpackCString# a) = getProp# o a
+"GHC.JS.PRIM getProp/literalUtf8" forall o a.
+ getProp o (GHC.unpackCStringUtf8# a) = getPropUtf8# o a
+ #-}
+
+-- | only safe on immutable object
+unsafeGetProp :: JSVal -> String -> JSVal
+unsafeGetProp o p = js_unsafeGetProp o (unsafeCoerce $ seqList p)
+{-# INLINE [0] unsafeGetProp #-}
+{-# RULES
+"GHC.JS.PRIM unsafeGetProp/literal" forall o a.
+ unsafeGetProp o (GHC.unpackCString# a) = unsafeGetProp# o a
+"GHC.JS.PRIM unsafeGetProp/literalUtf8" forall o a.
+ unsafeGetProp o (GHC.unpackCStringUtf8# a) = unsafeGetPropUtf8# o a
+ #-}
+
+getProp' :: JSVal -> JSVal -> IO JSVal
+getProp' o p = js_getProp' o p
+{-# INLINE [0] getProp' #-}
+{-# RULES
+"GHC.JS.PRIM getProp'/literal" forall o a.
+ getProp' o (unsafeUnpackJSString# a) = getProp# o a
+"GHC.JS.PRIM getProp'/literalUtf8" forall o a.
+ getProp' o (unsafeUnpackJSStringUtf8# a) = getPropUtf8# o a
+ #-}
+
+-- | only safe on immutable object
+unsafeGetProp' :: JSVal -> JSVal -> JSVal
+unsafeGetProp' o p = js_unsafeGetProp' o p
+{-# INLINE [0] unsafeGetProp' #-}
+{-# RULES
+"GHC.JS.PRIM unsafeGetProp'/literal" forall o a.
+ unsafeGetProp' o (unsafeUnpackJSString# a) = unsafeGetPropUtf8# o a
+"GHC.JS.PRIM unsafeGetProp'/literalUtf8" forall o a.
+ unsafeGetProp' o (unsafeUnpackJSStringUtf8# a) = unsafeGetPropUtf8# o a
+ #-}
+
+
+-- | only safe on immutable Addr#
+getProp# :: JSVal -> Addr# -> IO JSVal
+getProp# (JSVal o) p = IO $
+ \s -> case getPropUtf8## o p s of (# s', v #) -> (# s', JSVal v #)
+{-# INLINE [0] getProp# #-}
+-- js_getProp# o p
+
+-- | only safe on immutable Addr#
+getPropUtf8# :: JSVal -> Addr# -> IO JSVal
+getPropUtf8# (JSVal o) p = IO $
+ \s -> case getPropUtf8## o p s of (# s', v #) -> (# s', JSVal v #)
+{-# INLINE [0] getPropUtf8# #-}
+
+getPropUtf8## :: JSVal# -> Addr# -> State# s -> (# State# s, JSVal# #)
+getPropUtf8## o p = js_getPropUtf8## o p
+{-# NOINLINE getPropUtf8## #-}
+
+-- | only safe on immutable Addr# and JSVal
+unsafeGetProp# :: JSVal -> Addr# -> JSVal
+unsafeGetProp# (JSVal o) p = JSVal (unsafeGetPropUtf8## o p)
+{-# INLINE [0] unsafeGetProp# #-}
+
+-- | only safe on immutable Addr# and JSVal
+unsafeGetPropUtf8# :: JSVal -> Addr# -> JSVal
+unsafeGetPropUtf8# (JSVal o) p = JSVal (unsafeGetPropUtf8## o p)
+{-# INLINE [0] unsafeGetPropUtf8# #-}
+
+unsafeGetPropUtf8## :: JSVal# -> Addr# -> JSVal#
+unsafeGetPropUtf8## o p = js_unsafeGetPropUtf8## o p
+{-# NOINLINE unsafeGetPropUtf8## #-}
+
+unpackJSString# :: Addr# -> IO JSVal
+unpackJSString# a = IO $
+ \s -> case unpackJSStringUtf8## a s of (# s', v #) -> (# s', JSVal v #)
+{-# INLINE [0] unpackJSString# #-}
+
+unpackJSStringUtf8# :: Addr# -> IO JSVal
+unpackJSStringUtf8# a = IO $
+ \s -> case unpackJSStringUtf8## a s of (# s', v #) -> (# s', JSVal v #)
+{-# INLINE [0] unpackJSStringUtf8# #-}
+
+unpackJSStringUtf8## :: Addr# -> State# s -> (# State# s, JSVal# #)
+unpackJSStringUtf8## a s = js_unpackJSStringUtf8## a s
+{-# NOINLINE unpackJSStringUtf8## #-}
+
+-- | only safe on immutable Addr#
+unsafeUnpackJSString# :: Addr# -> JSVal
+unsafeUnpackJSString# a = JSVal (unsafeUnpackJSStringUtf8## a)
+ -- js_unsafeUnpackJSString# a
+{-# INLINE [0] unsafeUnpackJSString# #-}
+
+-- | only safe on immutable Addr#
+unsafeUnpackJSStringUtf8# :: Addr# -> JSVal
+unsafeUnpackJSStringUtf8# a = JSVal (unsafeUnpackJSStringUtf8## a)
+{-# INLINE [0] unsafeUnpackJSStringUtf8# #-}
+
+unsafeUnpackJSStringUtf8## :: Addr# -> JSVal#
+unsafeUnpackJSStringUtf8## a = js_unsafeUnpackJSStringUtf8## a
+{-# NOINLINE unsafeUnpackJSStringUtf8## #-}
+
+
+-- reduce the spine and all list elements to whnf
+seqList :: [a] -> [a]
+seqList xs = go xs `seq` xs
+ where go (y:ys) = y `seq` go ys
+ go [] = ()
+
+foreign import javascript unsafe "(($1) => { return h$toHsString($1); })"
+ js_fromJSString :: JSVal -> Exts.Any
+
+foreign import javascript unsafe "(($1) => { return h$fromHsString($1); })"
+ js_toJSString :: Exts.Any -> JSVal
+
+foreign import javascript unsafe "(($1) => { return h$toHsListJSVal($1); })"
+ js_fromJSArray :: JSVal -> IO Exts.Any
+
+foreign import javascript unsafe "(($1) => { return h$fromHsListJSVal($1); })"
+ js_toJSArray :: Exts.Any -> IO JSVal
+
+foreign import javascript unsafe "(($1) => { return ($1 === null); })"
+ js_isNull :: JSVal -> Bool
+
+foreign import javascript unsafe "(($1) => { return ($1 === undefined); })"
+ js_isUndefined :: JSVal -> Bool
+
+foreign import javascript unsafe "(($1) => { return ($r = typeof($1) === 'number' ? ($1|0) : 0;); })"
+ js_fromJSInt :: JSVal -> Int
+
+foreign import javascript unsafe "(($1) => { return ($r = $1;); })"
+ js_toJSInt :: Int -> JSVal
+
+foreign import javascript unsafe "$r = null;"
+ js_null :: JSVal
+
+foreign import javascript unsafe "(($1,$2) => { return $1[h$fromHsString($2)]; })"
+ js_getProp :: JSVal -> Exts.Any -> IO JSVal
+
+foreign import javascript unsafe "(($1,$2) => { return $1[h$fromHsString($2)]; })"
+ js_unsafeGetProp :: JSVal -> Exts.Any -> JSVal
+
+foreign import javascript unsafe "(($1,$2) => { return $1[$2]; })"
+ js_getProp' :: JSVal -> JSVal -> IO JSVal
+
+foreign import javascript unsafe "(($1,$2) => { return $1[$2]; })"
+ js_unsafeGetProp' :: JSVal -> JSVal -> JSVal
+
+foreign import javascript unsafe "(($1,$2_1,$2_2) => { return $1[h$decodeUtf8z($2_1, $2_2)]; })"
+ js_getPropUtf8## :: JSVal# -> Addr# -> State# s -> (# State# s, JSVal# #)
+
+foreign import javascript unsafe "(($1,$2_1,$2_2) => { return $1[h$decodeUtf8z($2_1, $2_2)]; })"
+ js_unsafeGetPropUtf8## :: JSVal# -> Addr# -> JSVal#
+
+foreign import javascript unsafe "(($1_1,$1_2) => { return h$decodeUtf8z($1_1, $1_2); })"
+ js_unpackJSStringUtf8## :: Addr# -> State# s -> (# State# s, JSVal# #)
+
+
+foreign import javascript unsafe "(($1_1, $1_2) => { return h$decodeUtf8z($1_1,$1_2); })"
+ js_unsafeUnpackJSStringUtf8## :: Addr# -> JSVal#
+
+foreign import javascript unsafe "(($1, $2) => { return $1($2); })"
+ js_callback_any :: JSVal# -> Exts.Any -> IO ()
+
+foreign import javascript unsafe "(($1, $2) => { return $1($2); })"
+ js_callback_jsval :: JSVal# -> JSVal -> IO ()
+
+#endif
+
+{- | If a synchronous thread tries to do something that can only
+ be done asynchronously, and the thread is set up to not
+ continue asynchronously, it receives this exception.
+ -}
+data WouldBlockException = WouldBlockException
+ deriving (Typeable)
+
+instance Show WouldBlockException where
+ show _ = "thread would block"
+
+instance Ex.Exception WouldBlockException
diff --git a/libraries/base/GHC/JS/Prim/Internal.hs b/libraries/base/GHC/JS/Prim/Internal.hs
new file mode 100644
index 0000000000..be8dd63040
--- /dev/null
+++ b/libraries/base/GHC/JS/Prim/Internal.hs
@@ -0,0 +1,56 @@
+{- | Code used by the RTS
+
+ -}
+
+module GHC.JS.Prim.Internal ( blockedIndefinitelyOnMVar
+ , blockedIndefinitelyOnSTM
+ , wouldBlock
+ , ignoreException
+ , setCurrentThreadResultException
+ , setCurrentThreadResultValue
+ ) where
+
+import Control.Exception
+
+import GHC.JS.Prim
+
+wouldBlock :: SomeException
+wouldBlock = toException WouldBlockException
+
+blockedIndefinitelyOnMVar :: SomeException
+blockedIndefinitelyOnMVar = toException BlockedIndefinitelyOnMVar
+
+blockedIndefinitelyOnSTM :: SomeException
+blockedIndefinitelyOnSTM = toException BlockedIndefinitelyOnSTM
+
+ignoreException :: SomeException -> IO ()
+ignoreException _ = return ()
+
+setCurrentThreadResultException :: SomeException -> IO ()
+setCurrentThreadResultException e
+ | Just WouldBlockException <- fromException e =
+ js_setCurrentThreadResultWouldBlock
+ | Just (JSException v _) <- fromException e =
+ js_setCurrentThreadResultJSException v
+ | otherwise =
+ js_setCurrentThreadResultHaskellException (toJSString (show e))
+
+setCurrentThreadResultValue :: IO JSVal -> IO ()
+setCurrentThreadResultValue x = js_setCurrentThreadResultValue =<< x
+
+foreign import javascript unsafe
+ "(() => { return h$setCurrentThreadResultWouldBlock; })"
+ js_setCurrentThreadResultWouldBlock :: IO ()
+
+foreign import javascript unsafe
+ "(($1) => { return h$setCurrentThreadResultJSException($1); })"
+ js_setCurrentThreadResultJSException :: JSVal -> IO ()
+
+foreign import javascript unsafe
+ "(($1) => { return h$setCurrentThreadResultHaskellException($1); })"
+ js_setCurrentThreadResultHaskellException :: JSVal -> IO ()
+
+foreign import javascript unsafe
+ "(($1) => { return h$setCurrentThreadResultValue($1); })"
+ js_setCurrentThreadResultValue :: JSVal -> IO ()
+
diff --git a/libraries/base/GHC/JS/Prim/Internal/Build.hs b/libraries/base/GHC/JS/Prim/Internal/Build.hs
new file mode 100644
index 0000000000..78203cd787
--- /dev/null
+++ b/libraries/base/GHC/JS/Prim/Internal/Build.hs
@@ -0,0 +1,1470 @@
+-- helpers for constructing JS objects that can be efficiently inlined as literals
+-- no Template Haskell available yet, generated by utils/genBuildObject.hs
+{-# LANGUAGE CPP #-}
+#if !defined(js_HOST_ARCH)
+module GHC.JS.Prim.Internal.Build () where
+#else
+{-# LANGUAGE ForeignFunctionInterface, JavaScriptFFI, GHCForeignImportPrim #-}
+module GHC.JS.Prim.Internal.Build
+ ( buildArrayI
+ , buildArrayM
+ , buildObjectI
+ , buildObjectM
+ , buildArrayI1
+ , buildArrayI2
+ , buildArrayI3
+ , buildArrayI4
+ , buildArrayI5
+ , buildArrayI6
+ , buildArrayI7
+ , buildArrayI8
+ , buildArrayI9
+ , buildArrayI10
+ , buildArrayI11
+ , buildArrayI12
+ , buildArrayI13
+ , buildArrayI14
+ , buildArrayI15
+ , buildArrayI16
+ , buildArrayI17
+ , buildArrayI18
+ , buildArrayI19
+ , buildArrayI20
+ , buildArrayI21
+ , buildArrayI22
+ , buildArrayI23
+ , buildArrayI24
+ , buildArrayI25
+ , buildArrayI26
+ , buildArrayI27
+ , buildArrayI28
+ , buildArrayI29
+ , buildArrayI30
+ , buildArrayI31
+ , buildArrayI32
+ , buildArrayM1
+ , buildArrayM2
+ , buildArrayM3
+ , buildArrayM4
+ , buildArrayM5
+ , buildArrayM6
+ , buildArrayM7
+ , buildArrayM8
+ , buildArrayM9
+ , buildArrayM10
+ , buildArrayM11
+ , buildArrayM12
+ , buildArrayM13
+ , buildArrayM14
+ , buildArrayM15
+ , buildArrayM16
+ , buildArrayM17
+ , buildArrayM18
+ , buildArrayM19
+ , buildArrayM20
+ , buildArrayM21
+ , buildArrayM22
+ , buildArrayM23
+ , buildArrayM24
+ , buildArrayM25
+ , buildArrayM26
+ , buildArrayM27
+ , buildArrayM28
+ , buildArrayM29
+ , buildArrayM30
+ , buildArrayM31
+ , buildArrayM32
+ , buildObjectI1
+ , buildObjectI2
+ , buildObjectI3
+ , buildObjectI4
+ , buildObjectI5
+ , buildObjectI6
+ , buildObjectI7
+ , buildObjectI8
+ , buildObjectI9
+ , buildObjectI10
+ , buildObjectI11
+ , buildObjectI12
+ , buildObjectI13
+ , buildObjectI14
+ , buildObjectI15
+ , buildObjectI16
+ , buildObjectI17
+ , buildObjectI18
+ , buildObjectI19
+ , buildObjectI20
+ , buildObjectI21
+ , buildObjectI22
+ , buildObjectI23
+ , buildObjectI24
+ , buildObjectI25
+ , buildObjectI26
+ , buildObjectI27
+ , buildObjectI28
+ , buildObjectI29
+ , buildObjectI30
+ , buildObjectI31
+ , buildObjectI32
+ , buildObjectM1
+ , buildObjectM2
+ , buildObjectM3
+ , buildObjectM4
+ , buildObjectM5
+ , buildObjectM6
+ , buildObjectM7
+ , buildObjectM8
+ , buildObjectM9
+ , buildObjectM10
+ , buildObjectM11
+ , buildObjectM12
+ , buildObjectM13
+ , buildObjectM14
+ , buildObjectM15
+ , buildObjectM16
+ , buildObjectM17
+ , buildObjectM18
+ , buildObjectM19
+ , buildObjectM20
+ , buildObjectM21
+ , buildObjectM22
+ , buildObjectM23
+ , buildObjectM24
+ , buildObjectM25
+ , buildObjectM26
+ , buildObjectM27
+ , buildObjectM28
+ , buildObjectM29
+ , buildObjectM30
+ , buildObjectM31
+ , buildObjectM32
+ ) where
+
+import GHC.JS.Prim
+import GHC.Exts
+import Unsafe.Coerce
+import System.IO.Unsafe
+
+type O = JSVal -- object
+type K = JSVal -- key
+type V = JSVal -- value
+type J = JSVal -- some JS value
+type A = JSVal -- array
+
+seqTupList :: [(a,b)] -> [(a,b)]
+seqTupList xs = go xs `seq` xs
+ where go ((y1,y2):ys) = y1 `seq` y2 `seq` go ys
+ go [] = ()
+
+foreign import javascript unsafe "$r = [];" js_emptyArrayI :: A
+
+buildArrayI :: [J] -> A
+buildArrayI xs = unsafePerformIO (toJSArray xs)
+{-# INLINE [1] buildArrayI #-}
+{-# RULES "buildArrayI/empty" buildArrayI [] = js_emptyArrayI #-}
+{-# RULES "buildArrayI/buildArrayI1" forall x1. buildArrayI [x1] = buildArrayI1 x1 #-}
+{-# RULES "buildArrayI/buildArrayI2" forall x1 x2. buildArrayI [x1,x2] = buildArrayI2 x1 x2 #-}
+{-# RULES "buildArrayI/buildArrayI3" forall x1 x2 x3. buildArrayI [x1,x2,x3] = buildArrayI3 x1 x2 x3 #-}
+{-# RULES "buildArrayI/buildArrayI4" forall x1 x2 x3 x4. buildArrayI [x1,x2,x3,x4] = buildArrayI4 x1 x2 x3 x4 #-}
+{-# RULES "buildArrayI/buildArrayI5" forall x1 x2 x3 x4 x5. buildArrayI [x1,x2,x3,x4,x5] = buildArrayI5 x1 x2 x3 x4 x5 #-}
+{-# RULES "buildArrayI/buildArrayI6" forall x1 x2 x3 x4 x5 x6. buildArrayI [x1,x2,x3,x4,x5,x6] = buildArrayI6 x1 x2 x3 x4 x5 x6 #-}
+{-# RULES "buildArrayI/buildArrayI7" forall x1 x2 x3 x4 x5 x6 x7. buildArrayI [x1,x2,x3,x4,x5,x6,x7] = buildArrayI7 x1 x2 x3 x4 x5 x6 x7 #-}
+{-# RULES "buildArrayI/buildArrayI8" forall x1 x2 x3 x4 x5 x6 x7 x8. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8] = buildArrayI8 x1 x2 x3 x4 x5 x6 x7 x8 #-}
+{-# RULES "buildArrayI/buildArrayI9" forall x1 x2 x3 x4 x5 x6 x7 x8 x9. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9] = buildArrayI9 x1 x2 x3 x4 x5 x6 x7 x8 x9 #-}
+{-# RULES "buildArrayI/buildArrayI10" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10] = buildArrayI10 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 #-}
+{-# RULES "buildArrayI/buildArrayI11" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11] = buildArrayI11 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 #-}
+{-# RULES "buildArrayI/buildArrayI12" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12] = buildArrayI12 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 #-}
+{-# RULES "buildArrayI/buildArrayI13" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13] = buildArrayI13 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 #-}
+{-# RULES "buildArrayI/buildArrayI14" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14] = buildArrayI14 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 #-}
+{-# RULES "buildArrayI/buildArrayI15" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15] = buildArrayI15 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 #-}
+{-# RULES "buildArrayI/buildArrayI16" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16] = buildArrayI16 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 #-}
+{-# RULES "buildArrayI/buildArrayI17" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17] = buildArrayI17 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 #-}
+{-# RULES "buildArrayI/buildArrayI18" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18] = buildArrayI18 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 #-}
+{-# RULES "buildArrayI/buildArrayI19" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19] = buildArrayI19 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 #-}
+{-# RULES "buildArrayI/buildArrayI20" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20] = buildArrayI20 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 #-}
+{-# RULES "buildArrayI/buildArrayI21" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21] = buildArrayI21 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 #-}
+{-# RULES "buildArrayI/buildArrayI22" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22] = buildArrayI22 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 #-}
+{-# RULES "buildArrayI/buildArrayI23" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23] = buildArrayI23 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 #-}
+{-# RULES "buildArrayI/buildArrayI24" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24] = buildArrayI24 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 #-}
+{-# RULES "buildArrayI/buildArrayI25" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25] = buildArrayI25 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 #-}
+{-# RULES "buildArrayI/buildArrayI26" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26] = buildArrayI26 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 #-}
+{-# RULES "buildArrayI/buildArrayI27" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27] = buildArrayI27 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 #-}
+{-# RULES "buildArrayI/buildArrayI28" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28] = buildArrayI28 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 #-}
+{-# RULES "buildArrayI/buildArrayI29" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29] = buildArrayI29 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 #-}
+{-# RULES "buildArrayI/buildArrayI30" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30] = buildArrayI30 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 #-}
+{-# RULES "buildArrayI/buildArrayI31" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31] = buildArrayI31 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 #-}
+{-# RULES "buildArrayI/buildArrayI32" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32. buildArrayI [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32] = buildArrayI32 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 #-}
+
+buildArrayI1 :: J -> A
+buildArrayI1 x1 =
+ js_buildArrayI1 x1
+{-# INLINE buildArrayI1 #-}
+
+foreign import javascript unsafe "[$1]"
+ js_buildArrayI1 :: J -> A
+
+
+buildArrayI2 :: J -> J -> A
+buildArrayI2 x1 x2 =
+ js_buildArrayI2 x1 x2
+{-# INLINE buildArrayI2 #-}
+
+foreign import javascript unsafe "[$1,$2]"
+ js_buildArrayI2 :: J -> J -> A
+
+
+buildArrayI3 :: J -> J -> J -> A
+buildArrayI3 x1 x2 x3 =
+ js_buildArrayI3 x1 x2 x3
+{-# INLINE buildArrayI3 #-}
+
+foreign import javascript unsafe "[$1,$2,$3]"
+ js_buildArrayI3 :: J -> J -> J -> A
+
+
+buildArrayI4 :: J -> J -> J -> J -> A
+buildArrayI4 x1 x2 x3 x4 =
+ js_buildArrayI4 x1 x2 x3 x4
+{-# INLINE buildArrayI4 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4]"
+ js_buildArrayI4 :: J -> J -> J -> J -> A
+
+
+buildArrayI5 :: J -> J -> J -> J -> J -> A
+buildArrayI5 x1 x2 x3 x4 x5 =
+ js_buildArrayI5 x1 x2 x3 x4 x5
+{-# INLINE buildArrayI5 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5]"
+ js_buildArrayI5 :: J -> J -> J -> J -> J -> A
+
+
+buildArrayI6 :: J -> J -> J -> J -> J -> J -> A
+buildArrayI6 x1 x2 x3 x4 x5 x6 =
+ js_buildArrayI6 x1 x2 x3 x4 x5 x6
+{-# INLINE buildArrayI6 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6]"
+ js_buildArrayI6 :: J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI7 :: J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI7 x1 x2 x3 x4 x5 x6 x7 =
+ js_buildArrayI7 x1 x2 x3 x4 x5 x6 x7
+{-# INLINE buildArrayI7 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7]"
+ js_buildArrayI7 :: J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI8 :: J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI8 x1 x2 x3 x4 x5 x6 x7 x8 =
+ js_buildArrayI8 x1 x2 x3 x4 x5 x6 x7 x8
+{-# INLINE buildArrayI8 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8]"
+ js_buildArrayI8 :: J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI9 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI9 x1 x2 x3 x4 x5 x6 x7 x8 x9 =
+ js_buildArrayI9 x1 x2 x3 x4 x5 x6 x7 x8 x9
+{-# INLINE buildArrayI9 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9]"
+ js_buildArrayI9 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI10 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI10 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 =
+ js_buildArrayI10 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
+{-# INLINE buildArrayI10 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10]"
+ js_buildArrayI10 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI11 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI11 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 =
+ js_buildArrayI11 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
+{-# INLINE buildArrayI11 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11]"
+ js_buildArrayI11 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI12 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI12 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 =
+ js_buildArrayI12 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
+{-# INLINE buildArrayI12 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12]"
+ js_buildArrayI12 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI13 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI13 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 =
+ js_buildArrayI13 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13
+{-# INLINE buildArrayI13 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13]"
+ js_buildArrayI13 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI14 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI14 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 =
+ js_buildArrayI14 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14
+{-# INLINE buildArrayI14 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14]"
+ js_buildArrayI14 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI15 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI15 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 =
+ js_buildArrayI15 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15
+{-# INLINE buildArrayI15 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15]"
+ js_buildArrayI15 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI16 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI16 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 =
+ js_buildArrayI16 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16
+{-# INLINE buildArrayI16 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16]"
+ js_buildArrayI16 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI17 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI17 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 =
+ js_buildArrayI17 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17
+{-# INLINE buildArrayI17 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17]"
+ js_buildArrayI17 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI18 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI18 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 =
+ js_buildArrayI18 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18
+{-# INLINE buildArrayI18 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18]"
+ js_buildArrayI18 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI19 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI19 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 =
+ js_buildArrayI19 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19
+{-# INLINE buildArrayI19 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19]"
+ js_buildArrayI19 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI20 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI20 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 =
+ js_buildArrayI20 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20
+{-# INLINE buildArrayI20 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20]"
+ js_buildArrayI20 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI21 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI21 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 =
+ js_buildArrayI21 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21
+{-# INLINE buildArrayI21 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21]"
+ js_buildArrayI21 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI22 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI22 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 =
+ js_buildArrayI22 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22
+{-# INLINE buildArrayI22 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22]"
+ js_buildArrayI22 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI23 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI23 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 =
+ js_buildArrayI23 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23
+{-# INLINE buildArrayI23 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23]"
+ js_buildArrayI23 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI24 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI24 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 =
+ js_buildArrayI24 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24
+{-# INLINE buildArrayI24 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24]"
+ js_buildArrayI24 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI25 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI25 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 =
+ js_buildArrayI25 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25
+{-# INLINE buildArrayI25 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25]"
+ js_buildArrayI25 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI26 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI26 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 =
+ js_buildArrayI26 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26
+{-# INLINE buildArrayI26 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26]"
+ js_buildArrayI26 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI27 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI27 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 =
+ js_buildArrayI27 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27
+{-# INLINE buildArrayI27 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27]"
+ js_buildArrayI27 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI28 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI28 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 =
+ js_buildArrayI28 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28
+{-# INLINE buildArrayI28 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28]"
+ js_buildArrayI28 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI29 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI29 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 =
+ js_buildArrayI29 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29
+{-# INLINE buildArrayI29 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29]"
+ js_buildArrayI29 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI30 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI30 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 =
+ js_buildArrayI30 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30
+{-# INLINE buildArrayI30 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30]"
+ js_buildArrayI30 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI31 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI31 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 =
+ js_buildArrayI31 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31
+{-# INLINE buildArrayI31 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31]"
+ js_buildArrayI31 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+buildArrayI32 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+buildArrayI32 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 =
+ js_buildArrayI32 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32
+{-# INLINE buildArrayI32 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32]"
+ js_buildArrayI32 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> A
+
+
+foreign import javascript unsafe "$r = [];" js_emptyArrayM :: IO A
+
+buildArrayM :: [J] -> IO A
+buildArrayM xs = toJSArray xs
+{-# INLINE [1] buildArrayM #-}
+{-# RULES "buildArrayM/empty" buildArrayM [] = js_emptyArrayM #-}
+{-# RULES "buildArrayM/buildArrayM1" forall x1. buildArrayM [x1] = buildArrayM1 x1 #-}
+{-# RULES "buildArrayM/buildArrayM2" forall x1 x2. buildArrayM [x1,x2] = buildArrayM2 x1 x2 #-}
+{-# RULES "buildArrayM/buildArrayM3" forall x1 x2 x3. buildArrayM [x1,x2,x3] = buildArrayM3 x1 x2 x3 #-}
+{-# RULES "buildArrayM/buildArrayM4" forall x1 x2 x3 x4. buildArrayM [x1,x2,x3,x4] = buildArrayM4 x1 x2 x3 x4 #-}
+{-# RULES "buildArrayM/buildArrayM5" forall x1 x2 x3 x4 x5. buildArrayM [x1,x2,x3,x4,x5] = buildArrayM5 x1 x2 x3 x4 x5 #-}
+{-# RULES "buildArrayM/buildArrayM6" forall x1 x2 x3 x4 x5 x6. buildArrayM [x1,x2,x3,x4,x5,x6] = buildArrayM6 x1 x2 x3 x4 x5 x6 #-}
+{-# RULES "buildArrayM/buildArrayM7" forall x1 x2 x3 x4 x5 x6 x7. buildArrayM [x1,x2,x3,x4,x5,x6,x7] = buildArrayM7 x1 x2 x3 x4 x5 x6 x7 #-}
+{-# RULES "buildArrayM/buildArrayM8" forall x1 x2 x3 x4 x5 x6 x7 x8. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8] = buildArrayM8 x1 x2 x3 x4 x5 x6 x7 x8 #-}
+{-# RULES "buildArrayM/buildArrayM9" forall x1 x2 x3 x4 x5 x6 x7 x8 x9. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9] = buildArrayM9 x1 x2 x3 x4 x5 x6 x7 x8 x9 #-}
+{-# RULES "buildArrayM/buildArrayM10" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10] = buildArrayM10 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 #-}
+{-# RULES "buildArrayM/buildArrayM11" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11] = buildArrayM11 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 #-}
+{-# RULES "buildArrayM/buildArrayM12" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12] = buildArrayM12 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 #-}
+{-# RULES "buildArrayM/buildArrayM13" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13] = buildArrayM13 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 #-}
+{-# RULES "buildArrayM/buildArrayM14" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14] = buildArrayM14 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 #-}
+{-# RULES "buildArrayM/buildArrayM15" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15] = buildArrayM15 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 #-}
+{-# RULES "buildArrayM/buildArrayM16" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16] = buildArrayM16 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 #-}
+{-# RULES "buildArrayM/buildArrayM17" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17] = buildArrayM17 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 #-}
+{-# RULES "buildArrayM/buildArrayM18" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18] = buildArrayM18 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 #-}
+{-# RULES "buildArrayM/buildArrayM19" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19] = buildArrayM19 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 #-}
+{-# RULES "buildArrayM/buildArrayM20" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20] = buildArrayM20 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 #-}
+{-# RULES "buildArrayM/buildArrayM21" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21] = buildArrayM21 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 #-}
+{-# RULES "buildArrayM/buildArrayM22" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22] = buildArrayM22 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 #-}
+{-# RULES "buildArrayM/buildArrayM23" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23] = buildArrayM23 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 #-}
+{-# RULES "buildArrayM/buildArrayM24" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24] = buildArrayM24 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 #-}
+{-# RULES "buildArrayM/buildArrayM25" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25] = buildArrayM25 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 #-}
+{-# RULES "buildArrayM/buildArrayM26" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26] = buildArrayM26 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 #-}
+{-# RULES "buildArrayM/buildArrayM27" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27] = buildArrayM27 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 #-}
+{-# RULES "buildArrayM/buildArrayM28" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28] = buildArrayM28 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 #-}
+{-# RULES "buildArrayM/buildArrayM29" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29] = buildArrayM29 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 #-}
+{-# RULES "buildArrayM/buildArrayM30" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30] = buildArrayM30 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 #-}
+{-# RULES "buildArrayM/buildArrayM31" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31] = buildArrayM31 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 #-}
+{-# RULES "buildArrayM/buildArrayM32" forall x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32. buildArrayM [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32] = buildArrayM32 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 #-}
+
+buildArrayM1 :: J -> IO A
+buildArrayM1 x1 =
+ js_buildArrayM1 x1
+{-# INLINE buildArrayM1 #-}
+
+foreign import javascript unsafe "[$1]"
+ js_buildArrayM1 :: J -> IO A
+
+
+buildArrayM2 :: J -> J -> IO A
+buildArrayM2 x1 x2 =
+ js_buildArrayM2 x1 x2
+{-# INLINE buildArrayM2 #-}
+
+foreign import javascript unsafe "[$1,$2]"
+ js_buildArrayM2 :: J -> J -> IO A
+
+
+buildArrayM3 :: J -> J -> J -> IO A
+buildArrayM3 x1 x2 x3 =
+ js_buildArrayM3 x1 x2 x3
+{-# INLINE buildArrayM3 #-}
+
+foreign import javascript unsafe "[$1,$2,$3]"
+ js_buildArrayM3 :: J -> J -> J -> IO A
+
+
+buildArrayM4 :: J -> J -> J -> J -> IO A
+buildArrayM4 x1 x2 x3 x4 =
+ js_buildArrayM4 x1 x2 x3 x4
+{-# INLINE buildArrayM4 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4]"
+ js_buildArrayM4 :: J -> J -> J -> J -> IO A
+
+
+buildArrayM5 :: J -> J -> J -> J -> J -> IO A
+buildArrayM5 x1 x2 x3 x4 x5 =
+ js_buildArrayM5 x1 x2 x3 x4 x5
+{-# INLINE buildArrayM5 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5]"
+ js_buildArrayM5 :: J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM6 :: J -> J -> J -> J -> J -> J -> IO A
+buildArrayM6 x1 x2 x3 x4 x5 x6 =
+ js_buildArrayM6 x1 x2 x3 x4 x5 x6
+{-# INLINE buildArrayM6 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6]"
+ js_buildArrayM6 :: J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM7 :: J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM7 x1 x2 x3 x4 x5 x6 x7 =
+ js_buildArrayM7 x1 x2 x3 x4 x5 x6 x7
+{-# INLINE buildArrayM7 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7]"
+ js_buildArrayM7 :: J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM8 :: J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM8 x1 x2 x3 x4 x5 x6 x7 x8 =
+ js_buildArrayM8 x1 x2 x3 x4 x5 x6 x7 x8
+{-# INLINE buildArrayM8 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8]"
+ js_buildArrayM8 :: J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM9 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM9 x1 x2 x3 x4 x5 x6 x7 x8 x9 =
+ js_buildArrayM9 x1 x2 x3 x4 x5 x6 x7 x8 x9
+{-# INLINE buildArrayM9 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9]"
+ js_buildArrayM9 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM10 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM10 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 =
+ js_buildArrayM10 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
+{-# INLINE buildArrayM10 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10]"
+ js_buildArrayM10 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM11 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM11 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 =
+ js_buildArrayM11 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11
+{-# INLINE buildArrayM11 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11]"
+ js_buildArrayM11 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM12 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM12 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 =
+ js_buildArrayM12 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
+{-# INLINE buildArrayM12 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12]"
+ js_buildArrayM12 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM13 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM13 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 =
+ js_buildArrayM13 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13
+{-# INLINE buildArrayM13 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13]"
+ js_buildArrayM13 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM14 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM14 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 =
+ js_buildArrayM14 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14
+{-# INLINE buildArrayM14 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14]"
+ js_buildArrayM14 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM15 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM15 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 =
+ js_buildArrayM15 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15
+{-# INLINE buildArrayM15 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15]"
+ js_buildArrayM15 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM16 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM16 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 =
+ js_buildArrayM16 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16
+{-# INLINE buildArrayM16 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16]"
+ js_buildArrayM16 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM17 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM17 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 =
+ js_buildArrayM17 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17
+{-# INLINE buildArrayM17 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17]"
+ js_buildArrayM17 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM18 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM18 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 =
+ js_buildArrayM18 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18
+{-# INLINE buildArrayM18 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18]"
+ js_buildArrayM18 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM19 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM19 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 =
+ js_buildArrayM19 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19
+{-# INLINE buildArrayM19 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19]"
+ js_buildArrayM19 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM20 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM20 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 =
+ js_buildArrayM20 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20
+{-# INLINE buildArrayM20 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20]"
+ js_buildArrayM20 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM21 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM21 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 =
+ js_buildArrayM21 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21
+{-# INLINE buildArrayM21 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21]"
+ js_buildArrayM21 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM22 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM22 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 =
+ js_buildArrayM22 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22
+{-# INLINE buildArrayM22 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22]"
+ js_buildArrayM22 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM23 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM23 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 =
+ js_buildArrayM23 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23
+{-# INLINE buildArrayM23 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23]"
+ js_buildArrayM23 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM24 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM24 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 =
+ js_buildArrayM24 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24
+{-# INLINE buildArrayM24 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24]"
+ js_buildArrayM24 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM25 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM25 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 =
+ js_buildArrayM25 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25
+{-# INLINE buildArrayM25 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25]"
+ js_buildArrayM25 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM26 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM26 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 =
+ js_buildArrayM26 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26
+{-# INLINE buildArrayM26 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26]"
+ js_buildArrayM26 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM27 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM27 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 =
+ js_buildArrayM27 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27
+{-# INLINE buildArrayM27 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27]"
+ js_buildArrayM27 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM28 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM28 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 =
+ js_buildArrayM28 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28
+{-# INLINE buildArrayM28 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28]"
+ js_buildArrayM28 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM29 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM29 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 =
+ js_buildArrayM29 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29
+{-# INLINE buildArrayM29 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29]"
+ js_buildArrayM29 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM30 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM30 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 =
+ js_buildArrayM30 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30
+{-# INLINE buildArrayM30 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30]"
+ js_buildArrayM30 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM31 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM31 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 =
+ js_buildArrayM31 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31
+{-# INLINE buildArrayM31 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31]"
+ js_buildArrayM31 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+buildArrayM32 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+buildArrayM32 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 =
+ js_buildArrayM32 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32
+{-# INLINE buildArrayM32 #-}
+
+foreign import javascript unsafe "[$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32]"
+ js_buildArrayM32 :: J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> J -> IO A
+
+
+foreign import javascript unsafe "h$buildObjectFromTupList($1)"
+ js_buildObjectFromTupListI :: Any -> O
+foreign import javascript unsafe "$r = {};" js_emptyObjectI :: O
+buildObjectI :: [(K,V)] -> O
+buildObjectI xs = js_buildObjectFromTupListI . unsafeCoerce . seqTupList $ xs
+{-# INLINE [1] buildObjectI #-}
+{-# RULES "buildObjectI/empty" buildObjectI [] = js_emptyObjectI #-}
+{-# RULES "buildObjectI/buildObjectI1" forall k1 v1. buildObjectI [(k1,v1)] = buildObjectI1 k1 v1 #-}
+{-# RULES "buildObjectI/buildObjectI2" forall k1 v1 k2 v2. buildObjectI [(k1,v1),(k2,v2)] = buildObjectI2 k1 v1 k2 v2 #-}
+{-# RULES "buildObjectI/buildObjectI3" forall k1 v1 k2 v2 k3 v3. buildObjectI [(k1,v1),(k2,v2),(k3,v3)] = buildObjectI3 k1 v1 k2 v2 k3 v3 #-}
+{-# RULES "buildObjectI/buildObjectI4" forall k1 v1 k2 v2 k3 v3 k4 v4. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4)] = buildObjectI4 k1 v1 k2 v2 k3 v3 k4 v4 #-}
+{-# RULES "buildObjectI/buildObjectI5" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5)] = buildObjectI5 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 #-}
+{-# RULES "buildObjectI/buildObjectI6" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6)] = buildObjectI6 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 #-}
+{-# RULES "buildObjectI/buildObjectI7" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7)] = buildObjectI7 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 #-}
+{-# RULES "buildObjectI/buildObjectI8" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8)] = buildObjectI8 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 #-}
+{-# RULES "buildObjectI/buildObjectI9" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9)] = buildObjectI9 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 #-}
+{-# RULES "buildObjectI/buildObjectI10" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10)] = buildObjectI10 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 #-}
+{-# RULES "buildObjectI/buildObjectI11" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11)] = buildObjectI11 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 #-}
+{-# RULES "buildObjectI/buildObjectI12" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12)] = buildObjectI12 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 #-}
+{-# RULES "buildObjectI/buildObjectI13" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13)] = buildObjectI13 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 #-}
+{-# RULES "buildObjectI/buildObjectI14" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14)] = buildObjectI14 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 #-}
+{-# RULES "buildObjectI/buildObjectI15" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15)] = buildObjectI15 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 #-}
+{-# RULES "buildObjectI/buildObjectI16" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16)] = buildObjectI16 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 #-}
+{-# RULES "buildObjectI/buildObjectI17" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17)] = buildObjectI17 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 #-}
+{-# RULES "buildObjectI/buildObjectI18" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18)] = buildObjectI18 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 #-}
+{-# RULES "buildObjectI/buildObjectI19" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19)] = buildObjectI19 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 #-}
+{-# RULES "buildObjectI/buildObjectI20" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20)] = buildObjectI20 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 #-}
+{-# RULES "buildObjectI/buildObjectI21" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21)] = buildObjectI21 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 #-}
+{-# RULES "buildObjectI/buildObjectI22" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22)] = buildObjectI22 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 #-}
+{-# RULES "buildObjectI/buildObjectI23" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23)] = buildObjectI23 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 #-}
+{-# RULES "buildObjectI/buildObjectI24" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24)] = buildObjectI24 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 #-}
+{-# RULES "buildObjectI/buildObjectI25" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25)] = buildObjectI25 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 #-}
+{-# RULES "buildObjectI/buildObjectI26" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25),(k26,v26)] = buildObjectI26 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 #-}
+{-# RULES "buildObjectI/buildObjectI27" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25),(k26,v26),(k27,v27)] = buildObjectI27 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 #-}
+{-# RULES "buildObjectI/buildObjectI28" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25),(k26,v26),(k27,v27),(k28,v28)] = buildObjectI28 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 #-}
+{-# RULES "buildObjectI/buildObjectI29" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25),(k26,v26),(k27,v27),(k28,v28),(k29,v29)] = buildObjectI29 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 #-}
+{-# RULES "buildObjectI/buildObjectI30" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25),(k26,v26),(k27,v27),(k28,v28),(k29,v29),(k30,v30)] = buildObjectI30 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 #-}
+{-# RULES "buildObjectI/buildObjectI31" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25),(k26,v26),(k27,v27),(k28,v28),(k29,v29),(k30,v30),(k31,v31)] = buildObjectI31 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31 #-}
+{-# RULES "buildObjectI/buildObjectI32" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31 k32 v32. buildObjectI [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25),(k26,v26),(k27,v27),(k28,v28),(k29,v29),(k30,v30),(k31,v31),(k32,v32)] = buildObjectI32 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31 k32 v32 #-}
+
+buildObjectI1 :: K -> V -> O
+buildObjectI1 k1 v1 =
+ js_buildObjectI1 k1 v1
+{-# INLINE buildObjectI1 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2)"
+ js_buildObjectI1 :: K -> V -> O
+
+
+buildObjectI2 :: K -> V -> K -> V -> O
+buildObjectI2 k1 v1 k2 v2 =
+ js_buildObjectI2 k1 v1 k2 v2
+{-# INLINE buildObjectI2 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4)"
+ js_buildObjectI2 :: K -> V -> K -> V -> O
+
+
+buildObjectI3 :: K -> V -> K -> V -> K -> V -> O
+buildObjectI3 k1 v1 k2 v2 k3 v3 =
+ js_buildObjectI3 k1 v1 k2 v2 k3 v3
+{-# INLINE buildObjectI3 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6)"
+ js_buildObjectI3 :: K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI4 :: K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI4 k1 v1 k2 v2 k3 v3 k4 v4 =
+ js_buildObjectI4 k1 v1 k2 v2 k3 v3 k4 v4
+{-# INLINE buildObjectI4 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8)"
+ js_buildObjectI4 :: K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI5 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI5 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 =
+ js_buildObjectI5 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5
+{-# INLINE buildObjectI5 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10)"
+ js_buildObjectI5 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI6 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI6 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 =
+ js_buildObjectI6 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6
+{-# INLINE buildObjectI6 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)"
+ js_buildObjectI6 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI7 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI7 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 =
+ js_buildObjectI7 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7
+{-# INLINE buildObjectI7 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14)"
+ js_buildObjectI7 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI8 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI8 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 =
+ js_buildObjectI8 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8
+{-# INLINE buildObjectI8 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16)"
+ js_buildObjectI8 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI9 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI9 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 =
+ js_buildObjectI9 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9
+{-# INLINE buildObjectI9 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18)"
+ js_buildObjectI9 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI10 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI10 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 =
+ js_buildObjectI10 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10
+{-# INLINE buildObjectI10 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20)"
+ js_buildObjectI10 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI11 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI11 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 =
+ js_buildObjectI11 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11
+{-# INLINE buildObjectI11 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22)"
+ js_buildObjectI11 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI12 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI12 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 =
+ js_buildObjectI12 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12
+{-# INLINE buildObjectI12 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24)"
+ js_buildObjectI12 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI13 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI13 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 =
+ js_buildObjectI13 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13
+{-# INLINE buildObjectI13 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26)"
+ js_buildObjectI13 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI14 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI14 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 =
+ js_buildObjectI14 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14
+{-# INLINE buildObjectI14 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28)"
+ js_buildObjectI14 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI15 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI15 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 =
+ js_buildObjectI15 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15
+{-# INLINE buildObjectI15 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30)"
+ js_buildObjectI15 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI16 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI16 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 =
+ js_buildObjectI16 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16
+{-# INLINE buildObjectI16 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32)"
+ js_buildObjectI16 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI17 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI17 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 =
+ js_buildObjectI17 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17
+{-# INLINE buildObjectI17 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34)"
+ js_buildObjectI17 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI18 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI18 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 =
+ js_buildObjectI18 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18
+{-# INLINE buildObjectI18 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36)"
+ js_buildObjectI18 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI19 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI19 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 =
+ js_buildObjectI19 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19
+{-# INLINE buildObjectI19 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38)"
+ js_buildObjectI19 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI20 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI20 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 =
+ js_buildObjectI20 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20
+{-# INLINE buildObjectI20 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40)"
+ js_buildObjectI20 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI21 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI21 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 =
+ js_buildObjectI21 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21
+{-# INLINE buildObjectI21 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42)"
+ js_buildObjectI21 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI22 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI22 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 =
+ js_buildObjectI22 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22
+{-# INLINE buildObjectI22 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44)"
+ js_buildObjectI22 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI23 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI23 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 =
+ js_buildObjectI23 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23
+{-# INLINE buildObjectI23 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46)"
+ js_buildObjectI23 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI24 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI24 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 =
+ js_buildObjectI24 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24
+{-# INLINE buildObjectI24 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48)"
+ js_buildObjectI24 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI25 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI25 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 =
+ js_buildObjectI25 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25
+{-# INLINE buildObjectI25 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50)"
+ js_buildObjectI25 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI26 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI26 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 =
+ js_buildObjectI26 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26
+{-# INLINE buildObjectI26 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52)"
+ js_buildObjectI26 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI27 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI27 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 =
+ js_buildObjectI27 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27
+{-# INLINE buildObjectI27 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54)"
+ js_buildObjectI27 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI28 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI28 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 =
+ js_buildObjectI28 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28
+{-# INLINE buildObjectI28 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,$56)"
+ js_buildObjectI28 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI29 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI29 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 =
+ js_buildObjectI29 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29
+{-# INLINE buildObjectI29 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,$56,$57,$58)"
+ js_buildObjectI29 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI30 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI30 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 =
+ js_buildObjectI30 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30
+{-# INLINE buildObjectI30 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$60)"
+ js_buildObjectI30 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI31 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI31 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31 =
+ js_buildObjectI31 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31
+{-# INLINE buildObjectI31 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$60,$61,$62)"
+ js_buildObjectI31 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+buildObjectI32 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+buildObjectI32 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31 k32 v32 =
+ js_buildObjectI32 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31 k32 v32
+{-# INLINE buildObjectI32 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$60,$61,$62,$63,$64)"
+ js_buildObjectI32 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> O
+
+
+foreign import javascript unsafe "h$buildObjectFromTupList($1)"
+ js_buildObjectFromTupListM :: Any -> IO O
+foreign import javascript unsafe "$r = {};" js_emptyObjectM :: IO O
+buildObjectM :: [(K,V)] -> IO O
+buildObjectM xs = js_buildObjectFromTupListM . unsafeCoerce . seqTupList $ xs
+{-# INLINE [1] buildObjectM #-}
+{-# RULES "buildObjectM/empty" buildObjectM [] = js_emptyObjectM #-}
+{-# RULES "buildObjectM/buildObjectM1" forall k1 v1. buildObjectM [(k1,v1)] = buildObjectM1 k1 v1 #-}
+{-# RULES "buildObjectM/buildObjectM2" forall k1 v1 k2 v2. buildObjectM [(k1,v1),(k2,v2)] = buildObjectM2 k1 v1 k2 v2 #-}
+{-# RULES "buildObjectM/buildObjectM3" forall k1 v1 k2 v2 k3 v3. buildObjectM [(k1,v1),(k2,v2),(k3,v3)] = buildObjectM3 k1 v1 k2 v2 k3 v3 #-}
+{-# RULES "buildObjectM/buildObjectM4" forall k1 v1 k2 v2 k3 v3 k4 v4. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4)] = buildObjectM4 k1 v1 k2 v2 k3 v3 k4 v4 #-}
+{-# RULES "buildObjectM/buildObjectM5" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5)] = buildObjectM5 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 #-}
+{-# RULES "buildObjectM/buildObjectM6" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6)] = buildObjectM6 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 #-}
+{-# RULES "buildObjectM/buildObjectM7" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7)] = buildObjectM7 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 #-}
+{-# RULES "buildObjectM/buildObjectM8" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8)] = buildObjectM8 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 #-}
+{-# RULES "buildObjectM/buildObjectM9" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9)] = buildObjectM9 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 #-}
+{-# RULES "buildObjectM/buildObjectM10" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10)] = buildObjectM10 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 #-}
+{-# RULES "buildObjectM/buildObjectM11" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11)] = buildObjectM11 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 #-}
+{-# RULES "buildObjectM/buildObjectM12" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12)] = buildObjectM12 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 #-}
+{-# RULES "buildObjectM/buildObjectM13" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13)] = buildObjectM13 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 #-}
+{-# RULES "buildObjectM/buildObjectM14" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14)] = buildObjectM14 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 #-}
+{-# RULES "buildObjectM/buildObjectM15" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15)] = buildObjectM15 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 #-}
+{-# RULES "buildObjectM/buildObjectM16" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16)] = buildObjectM16 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 #-}
+{-# RULES "buildObjectM/buildObjectM17" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17)] = buildObjectM17 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 #-}
+{-# RULES "buildObjectM/buildObjectM18" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18)] = buildObjectM18 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 #-}
+{-# RULES "buildObjectM/buildObjectM19" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19)] = buildObjectM19 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 #-}
+{-# RULES "buildObjectM/buildObjectM20" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20)] = buildObjectM20 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 #-}
+{-# RULES "buildObjectM/buildObjectM21" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21)] = buildObjectM21 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 #-}
+{-# RULES "buildObjectM/buildObjectM22" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22)] = buildObjectM22 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 #-}
+{-# RULES "buildObjectM/buildObjectM23" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23)] = buildObjectM23 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 #-}
+{-# RULES "buildObjectM/buildObjectM24" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24)] = buildObjectM24 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 #-}
+{-# RULES "buildObjectM/buildObjectM25" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25)] = buildObjectM25 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 #-}
+{-# RULES "buildObjectM/buildObjectM26" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25),(k26,v26)] = buildObjectM26 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 #-}
+{-# RULES "buildObjectM/buildObjectM27" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25),(k26,v26),(k27,v27)] = buildObjectM27 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 #-}
+{-# RULES "buildObjectM/buildObjectM28" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25),(k26,v26),(k27,v27),(k28,v28)] = buildObjectM28 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 #-}
+{-# RULES "buildObjectM/buildObjectM29" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25),(k26,v26),(k27,v27),(k28,v28),(k29,v29)] = buildObjectM29 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 #-}
+{-# RULES "buildObjectM/buildObjectM30" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25),(k26,v26),(k27,v27),(k28,v28),(k29,v29),(k30,v30)] = buildObjectM30 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 #-}
+{-# RULES "buildObjectM/buildObjectM31" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25),(k26,v26),(k27,v27),(k28,v28),(k29,v29),(k30,v30),(k31,v31)] = buildObjectM31 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31 #-}
+{-# RULES "buildObjectM/buildObjectM32" forall k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31 k32 v32. buildObjectM [(k1,v1),(k2,v2),(k3,v3),(k4,v4),(k5,v5),(k6,v6),(k7,v7),(k8,v8),(k9,v9),(k10,v10),(k11,v11),(k12,v12),(k13,v13),(k14,v14),(k15,v15),(k16,v16),(k17,v17),(k18,v18),(k19,v19),(k20,v20),(k21,v21),(k22,v22),(k23,v23),(k24,v24),(k25,v25),(k26,v26),(k27,v27),(k28,v28),(k29,v29),(k30,v30),(k31,v31),(k32,v32)] = buildObjectM32 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31 k32 v32 #-}
+
+buildObjectM1 :: K -> V -> IO O
+buildObjectM1 k1 v1 =
+ js_buildObjectM1 k1 v1
+{-# INLINE buildObjectM1 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2)"
+ js_buildObjectM1 :: K -> V -> IO O
+
+
+buildObjectM2 :: K -> V -> K -> V -> IO O
+buildObjectM2 k1 v1 k2 v2 =
+ js_buildObjectM2 k1 v1 k2 v2
+{-# INLINE buildObjectM2 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4)"
+ js_buildObjectM2 :: K -> V -> K -> V -> IO O
+
+
+buildObjectM3 :: K -> V -> K -> V -> K -> V -> IO O
+buildObjectM3 k1 v1 k2 v2 k3 v3 =
+ js_buildObjectM3 k1 v1 k2 v2 k3 v3
+{-# INLINE buildObjectM3 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6)"
+ js_buildObjectM3 :: K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM4 :: K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM4 k1 v1 k2 v2 k3 v3 k4 v4 =
+ js_buildObjectM4 k1 v1 k2 v2 k3 v3 k4 v4
+{-# INLINE buildObjectM4 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8)"
+ js_buildObjectM4 :: K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM5 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM5 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 =
+ js_buildObjectM5 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5
+{-# INLINE buildObjectM5 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10)"
+ js_buildObjectM5 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM6 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM6 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 =
+ js_buildObjectM6 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6
+{-# INLINE buildObjectM6 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)"
+ js_buildObjectM6 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM7 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM7 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 =
+ js_buildObjectM7 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7
+{-# INLINE buildObjectM7 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14)"
+ js_buildObjectM7 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM8 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM8 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 =
+ js_buildObjectM8 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8
+{-# INLINE buildObjectM8 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16)"
+ js_buildObjectM8 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM9 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM9 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 =
+ js_buildObjectM9 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9
+{-# INLINE buildObjectM9 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18)"
+ js_buildObjectM9 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM10 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM10 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 =
+ js_buildObjectM10 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10
+{-# INLINE buildObjectM10 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20)"
+ js_buildObjectM10 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM11 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM11 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 =
+ js_buildObjectM11 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11
+{-# INLINE buildObjectM11 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22)"
+ js_buildObjectM11 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM12 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM12 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 =
+ js_buildObjectM12 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12
+{-# INLINE buildObjectM12 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24)"
+ js_buildObjectM12 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM13 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM13 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 =
+ js_buildObjectM13 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13
+{-# INLINE buildObjectM13 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26)"
+ js_buildObjectM13 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM14 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM14 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 =
+ js_buildObjectM14 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14
+{-# INLINE buildObjectM14 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28)"
+ js_buildObjectM14 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM15 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM15 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 =
+ js_buildObjectM15 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15
+{-# INLINE buildObjectM15 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30)"
+ js_buildObjectM15 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM16 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM16 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 =
+ js_buildObjectM16 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16
+{-# INLINE buildObjectM16 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32)"
+ js_buildObjectM16 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM17 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM17 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 =
+ js_buildObjectM17 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17
+{-# INLINE buildObjectM17 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34)"
+ js_buildObjectM17 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM18 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM18 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 =
+ js_buildObjectM18 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18
+{-# INLINE buildObjectM18 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36)"
+ js_buildObjectM18 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM19 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM19 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 =
+ js_buildObjectM19 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19
+{-# INLINE buildObjectM19 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38)"
+ js_buildObjectM19 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM20 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM20 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 =
+ js_buildObjectM20 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20
+{-# INLINE buildObjectM20 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40)"
+ js_buildObjectM20 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM21 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM21 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 =
+ js_buildObjectM21 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21
+{-# INLINE buildObjectM21 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42)"
+ js_buildObjectM21 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM22 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM22 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 =
+ js_buildObjectM22 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22
+{-# INLINE buildObjectM22 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44)"
+ js_buildObjectM22 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM23 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM23 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 =
+ js_buildObjectM23 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23
+{-# INLINE buildObjectM23 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46)"
+ js_buildObjectM23 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM24 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM24 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 =
+ js_buildObjectM24 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24
+{-# INLINE buildObjectM24 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48)"
+ js_buildObjectM24 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM25 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM25 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 =
+ js_buildObjectM25 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25
+{-# INLINE buildObjectM25 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50)"
+ js_buildObjectM25 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM26 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM26 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 =
+ js_buildObjectM26 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26
+{-# INLINE buildObjectM26 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52)"
+ js_buildObjectM26 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM27 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM27 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 =
+ js_buildObjectM27 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27
+{-# INLINE buildObjectM27 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54)"
+ js_buildObjectM27 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM28 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM28 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 =
+ js_buildObjectM28 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28
+{-# INLINE buildObjectM28 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,$56)"
+ js_buildObjectM28 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM29 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM29 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 =
+ js_buildObjectM29 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29
+{-# INLINE buildObjectM29 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,$56,$57,$58)"
+ js_buildObjectM29 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM30 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM30 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 =
+ js_buildObjectM30 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30
+{-# INLINE buildObjectM30 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$60)"
+ js_buildObjectM30 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM31 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM31 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31 =
+ js_buildObjectM31 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31
+{-# INLINE buildObjectM31 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$60,$61,$62)"
+ js_buildObjectM31 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+buildObjectM32 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+buildObjectM32 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31 k32 v32 =
+ js_buildObjectM32 k1 v1 k2 v2 k3 v3 k4 v4 k5 v5 k6 v6 k7 v7 k8 v8 k9 v9 k10 v10 k11 v11 k12 v12 k13 v13 k14 v14 k15 v15 k16 v16 k17 v17 k18 v18 k19 v19 k20 v20 k21 v21 k22 v22 k23 v23 k24 v24 k25 v25 k26 v26 k27 v27 k28 v28 k29 v29 k30 v30 k31 v31 k32 v32
+{-# INLINE buildObjectM32 #-}
+
+foreign import javascript unsafe "h$buildObject($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$60,$61,$62,$63,$64)"
+ js_buildObjectM32 :: K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> K -> V -> IO O
+
+
+
+#endif
diff --git a/libraries/base/GHC/Stack/CCS.hsc b/libraries/base/GHC/Stack/CCS.hsc
index fa85270012..b6d3f83b94 100644
--- a/libraries/base/GHC/Stack/CCS.hsc
+++ b/libraries/base/GHC/Stack/CCS.hsc
@@ -76,6 +76,22 @@ clearCCS :: IO a -> IO a
clearCCS (IO m) = IO $ \s -> clearCCS## m s
-- | Get the 'CostCentre' at the head of a 'CostCentreStack'.
+#if defined(js_HOST_ARCH)
+ccsCC :: Ptr CostCentreStack -> IO (Ptr CostCentre)
+ccsCC p = peekByteOff p 4
+
+ccsParent :: Ptr CostCentreStack -> IO (Ptr CostCentreStack)
+ccsParent p = peekByteOff p 8
+
+ccLabel :: Ptr CostCentre -> IO CString
+ccLabel p = peekByteOff p 4
+
+ccModule :: Ptr CostCentre -> IO CString
+ccModule p = peekByteOff p 8
+
+ccSrcSpan :: Ptr CostCentre -> IO CString
+ccSrcSpan p = peekByteOff p 12
+#else
ccsCC :: Ptr CostCentreStack -> IO (Ptr CostCentre)
ccsCC p = (# peek CostCentreStack, cc) p
@@ -94,6 +110,7 @@ ccModule p = (# peek CostCentre, module) p
-- | Get the source span of a 'CostCentre'.
ccSrcSpan :: Ptr CostCentre -> IO CString
ccSrcSpan p = (# peek CostCentre, srcloc) p
+#endif
-- | Returns a @[String]@ representing the current call stack. This
-- can be useful for debugging.
diff --git a/libraries/base/GHC/TopHandler.hs b/libraries/base/GHC/TopHandler.hs
index b2b29cf5d7..153b5170d7 100644
--- a/libraries/base/GHC/TopHandler.hs
+++ b/libraries/base/GHC/TopHandler.hs
@@ -47,6 +47,7 @@ import GHC.Weak
#if defined(mingw32_HOST_OS)
import GHC.ConsoleHandler
+#elif defined(js_HOST_ARCH)
#else
import Data.Dynamic (toDyn)
#endif
@@ -94,7 +95,9 @@ runMainIO main =
topHandler
install_interrupt_handler :: IO () -> IO ()
-#if defined(mingw32_HOST_OS)
+#if defined(js_HOST_ARCH)
+install_interrupt_handler _ = return ()
+#elif defined(mingw32_HOST_OS)
install_interrupt_handler handler = do
_ <- GHC.ConsoleHandler.installHandler $
Catch $ \event ->
@@ -266,7 +269,7 @@ unreachable :: IO a
unreachable = failIO "If you can read this, shutdownHaskellAndExit did not exit."
exitHelper :: CInt -> Int -> IO a
-#if defined(mingw32_HOST_OS)
+#if defined(mingw32_HOST_OS) || defined(js_HOST_ARCH)
exitHelper exitKind r =
shutdownHaskellAndExit (fromIntegral r) exitKind >> unreachable
#else
@@ -294,7 +297,7 @@ foreign import ccall "shutdownHaskellAndSignal"
exitInterrupted :: IO a
exitInterrupted =
-#if defined(mingw32_HOST_OS)
+#if defined(mingw32_HOST_OS) || defined(js_HOST_ARCH)
safeExit 252
#elif !defined(HAVE_SIGNAL_H)
safeExit 1
diff --git a/libraries/base/GHC/Windows.hs b/libraries/base/GHC/Windows.hs
index be0c3837a9..85faa25e43 100644
--- a/libraries/base/GHC/Windows.hs
+++ b/libraries/base/GHC/Windows.hs
@@ -21,6 +21,10 @@
-----------------------------------------------------------------------------
module GHC.Windows (
+#if defined(js_HOST_ARCH)
+ ) where
+
+#else
-- * Types
BOOL,
LPBOOL,
@@ -236,3 +240,5 @@ ddwordToDwords n =
dwordsToDdword:: (DWORD,DWORD) -> DDWORD
dwordsToDdword (hi,low) = (fromIntegral low) .|. (fromIntegral hi `shiftL` finiteBitSize hi)
+
+#endif
diff --git a/libraries/base/System/CPUTime.hsc b/libraries/base/System/CPUTime.hsc
index 5b0fdbf4da..19d21e2135 100644
--- a/libraries/base/System/CPUTime.hsc
+++ b/libraries/base/System/CPUTime.hsc
@@ -34,6 +34,9 @@ import System.IO.Unsafe (unsafePerformIO)
#if defined(mingw32_HOST_OS)
import qualified System.CPUTime.Windows as I
+#elif defined(js_HOST_ARCH)
+import qualified System.CPUTime.Javascript as I
+
#elif _POSIX_TIMERS > 0 && defined(_POSIX_CPUTIME) && _POSIX_CPUTIME >= 0
import qualified System.CPUTime.Posix.ClockGetTime as I
diff --git a/libraries/base/System/CPUTime/Javascript.hs b/libraries/base/System/CPUTime/Javascript.hs
new file mode 100644
index 0000000000..612d428f0e
--- /dev/null
+++ b/libraries/base/System/CPUTime/Javascript.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE JavaScriptFFI #-}
+
+module System.CPUTime.Javascript
+ ( getCPUTime
+ , getCpuTimePrecision
+ )
+where
+
+import qualified System.CPUTime.Unsupported as I
+
+getCpuTimePrecision :: IO Integer
+getCpuTimePrecision = toInteger <$> js_cpuTimePrecision
+
+getCPUTime :: IO Integer
+getCPUTime = do
+ t <- js_getCPUTime
+ if t == -1 then I.getCPUTime
+ else pure (1000 * round t)
+
+foreign import javascript unsafe
+ "(() => { return h$cpuTimePrecision(); })"
+ js_cpuTimePrecision :: IO Int
+
+foreign import javascript unsafe
+ "(() => { return h$getCPUTime(); })"
+ js_getCPUTime :: IO Double
diff --git a/libraries/base/System/Environment.hs b/libraries/base/System/Environment.hs
index 44382acf45..c5e5d6d039 100644
--- a/libraries/base/System/Environment.hs
+++ b/libraries/base/System/Environment.hs
@@ -19,7 +19,9 @@ module System.Environment
(
getArgs,
getProgName,
+#if !defined(js_HOST_ARCH)
executablePath,
+#endif
getExecutablePath,
getEnv,
lookupEnv,
diff --git a/libraries/base/System/Environment/ExecutablePath.hsc b/libraries/base/System/Environment/ExecutablePath.hsc
index 1bee1122e8..ede63d5e6d 100644
--- a/libraries/base/System/Environment/ExecutablePath.hsc
+++ b/libraries/base/System/Environment/ExecutablePath.hsc
@@ -18,9 +18,18 @@
module System.Environment.ExecutablePath
( getExecutablePath
+##if !defined(js_HOST_ARCH)
, executablePath
+##endif
) where
+##if defined(js_HOST_ARCH)
+
+getExecutablePath :: IO FilePath
+getExecutablePath = return "a.jsexe"
+
+##else
+
-- The imports are purposely kept completely disjoint to prevent edits
-- to one OS implementation from breaking another.
@@ -372,3 +381,5 @@ executablePath = Nothing
--------------------------------------------------------------------------------
#endif
+
+##endif
diff --git a/libraries/base/System/Posix/Internals.hs b/libraries/base/System/Posix/Internals.hs
index f2207d32a6..6918aa29a9 100644
--- a/libraries/base/System/Posix/Internals.hs
+++ b/libraries/base/System/Posix/Internals.hs
@@ -368,9 +368,6 @@ type CFilePath = CString
type CFilePath = CWString
#endif
-foreign import ccall unsafe "HsBase.h __hscore_open"
- c_open :: CFilePath -> CInt -> CMode -> IO CInt
-
-- | The same as 'c_safe_open', but an /interruptible operation/
-- as described in "Control.Exception"—it respects `uninterruptibleMask`
-- but not `mask`.
@@ -415,11 +412,16 @@ c_interruptible_open filepath oflags mode =
interruptible (IO $ \s -> (# yield# s, () #))
pure open_res
--- |
---
--- @since 4.16.0.0
-foreign import ccall interruptible "HsBase.h __hscore_open"
- c_interruptible_open_ :: CFilePath -> CInt -> CMode -> IO CInt
+c_safe_open :: CFilePath -> CInt -> CMode -> IO CInt
+c_safe_open filepath oflags mode =
+ getMaskingState >>= \case
+ -- When exceptions are unmasked, we use an interruptible
+ -- open call. If the system call is successfully
+ -- interrupted, the situation will be the same as if
+ -- the exception had arrived before this function was
+ -- called.
+ Unmasked -> c_interruptible_open_ filepath oflags mode
+ _ -> c_safe_open_ filepath oflags mode
-- | Consult the RTS to find whether it is threaded.
--
@@ -427,21 +429,20 @@ foreign import ccall interruptible "HsBase.h __hscore_open"
hostIsThreaded :: Bool
hostIsThreaded = rtsIsThreaded_ /= 0
+#if !defined(js_HOST_ARCH)
+foreign import ccall unsafe "HsBase.h __hscore_open"
+ c_open :: CFilePath -> CInt -> CMode -> IO CInt
+
-- |
--
-- @since 4.16.0.0
-foreign import ccall unsafe "rts_isThreaded" rtsIsThreaded_ :: Int
+foreign import ccall interruptible "HsBase.h __hscore_open"
+ c_interruptible_open_ :: CFilePath -> CInt -> CMode -> IO CInt
-c_safe_open :: CFilePath -> CInt -> CMode -> IO CInt
-c_safe_open filepath oflags mode =
- getMaskingState >>= \case
- -- When exceptions are unmasked, we use an interruptible
- -- open call. If the system call is successfully
- -- interrupted, the situation will be the same as if
- -- the exception had arrived before this function was
- -- called.
- Unmasked -> c_interruptible_open_ filepath oflags mode
- _ -> c_safe_open_ filepath oflags mode
+-- |
+--
+-- @since 4.16.0.0
+foreign import ccall unsafe "rts_isThreaded" rtsIsThreaded_ :: Int
foreign import ccall safe "HsBase.h __hscore_open"
c_safe_open_ :: CFilePath -> CInt -> CMode -> IO CInt
@@ -452,6 +453,145 @@ foreign import ccall unsafe "HsBase.h __hscore_fstat"
foreign import ccall unsafe "HsBase.h __hscore_lstat"
lstat :: CFilePath -> Ptr CStat -> IO CInt
+#endif
+
+#if defined(js_HOST_ARCH)
+
+foreign import javascript unsafe "(() => { return rts_isThreaded; })" rtsIsThreaded_ :: Int
+foreign import javascript interruptible "(($1_1, $2_2, $2, $c) => { return h$base_access($1_1,$2_2,$2,$c); })"
+ c_access :: CString -> CInt -> IO CInt
+foreign import javascript interruptible "(($1_1, $2_2, $2, $c) => { return h$base_chmod($1_1,$2_2,$2,$c); })"
+ c_chmod :: CString -> CMode -> IO CInt
+foreign import javascript interruptible "(($1,$c) => { return h$base_close($1,$c); })"
+ c_close :: CInt -> IO CInt
+foreign import javascript interruptible "(($1, $c) => { return h$base_creat($1,$c); })"
+ c_creat :: CString -> CMode -> IO CInt
+foreign import javascript interruptible "(($1, $c) => { return h$base_dup($1, $c); })"
+ c_dup :: CInt -> IO CInt
+foreign import javascript interruptible "(($1, $2, $c) => { return h$base_dup2($1,$2,$c); })"
+ c_dup2 :: CInt -> CInt -> IO CInt
+foreign import javascript interruptible "(($1,$2_1,$2_2,$c) => { return h$base_fstat($1,$2_1,$2_2,$c); })" -- fixme wrong type
+ c_fstat :: CInt -> Ptr CStat -> IO CInt
+foreign import javascript unsafe "(($1) => { return h$base_isatty($1); })"
+ c_isatty :: CInt -> IO CInt
+foreign import javascript interruptible "(($1,$2_1,$2_2,$3,$c) => { return h$base_lseek($1,$2_1,$2_2,$3,$c); })"
+ c_lseek :: CInt -> COff -> CInt -> IO COff
+foreign import javascript interruptible "(($1_1,$1_2,$2_1,$2_2,$c) => { return h$base_lstat($1_1,$1_2,$2_1,$2_2,$c); })" -- fixme wrong type
+ lstat :: CFilePath -> Ptr CStat -> IO CInt
+foreign import javascript interruptible "(($1_1,$1_2,$2,$3,$c) => { return h$base_open($1_1,$1_2,$2,$3,$c); })"
+ c_open :: CFilePath -> CInt -> CMode -> IO CInt
+foreign import javascript interruptible "(($1_1,$1_2,$2,$3,$c) => { return h$base_open($1_1,$1_2,$2,$3,$c); })"
+ c_interruptible_open_ :: CFilePath -> CInt -> CMode -> IO CInt
+foreign import javascript interruptible "(($1_1,$1_2,$2,$3,$c) => { return h$base_open($1_1,$1_2,$2,$3,$c); })"
+ c_safe_open_ :: CFilePath -> CInt -> CMode -> IO CInt
+foreign import javascript interruptible "(($1,$2_1,$2_2,$3,$c) => { return h$base_read($1,$2_1,$2_2,$3,$c); })"
+ c_read :: CInt -> Ptr Word8 -> CSize -> IO CSsize
+foreign import javascript interruptible "(($1,$2_1,$2_2,$3,$c) => { return h$base_read($1,$2_1,$2_2,$3,$c); })"
+ c_safe_read :: CInt -> Ptr Word8 -> CSize -> IO CSsize
+foreign import javascript interruptible "(($1_1,$1_2,$2_1,$2_2,$c) => { return h$base_stat($1_1,$1_2,$2_1,$2_2,$c); })" -- fixme wrong type
+ c_stat :: CFilePath -> Ptr CStat -> IO CInt
+foreign import javascript unsafe "(($1) => { return h$base_umask($1); })"
+ c_umask :: CMode -> IO CMode
+foreign import javascript interruptible "(($1,$2_1,$2_2,$3,$c) => { return h$base_write($1,$2_1,$2_2,$3,$c); })"
+ c_write :: CInt -> Ptr Word8 -> CSize -> IO CSsize
+foreign import javascript interruptible "(($1,$2_1,$2_2,$3,$c) => { return h$base_write($1,$2_1,$2_2,$3,$c); })"
+ c_safe_write :: CInt -> Ptr Word8 -> CSize -> IO CSsize
+foreign import javascript interruptible "(($1,$2_1,$2_2,$c) => { return h$base_ftruncate($1,$2_1,$2_2,$c); })" -- fixme COff
+ c_ftruncate :: CInt -> FileOffset -> IO CInt
+foreign import javascript interruptible "(($1_1,$1_2,$c) => { return h$base_unlink($1_1,$1_2,$c); })"
+ c_unlink :: CString -> IO CInt
+foreign import javascript unsafe "(() => { return h$base_getpid; })"
+ c_getpid :: IO CPid
+-- foreign import ccall unsafe "HsBase.h fork"
+-- c_fork :: IO CPid
+foreign import javascript interruptible "($1_1,$1_2,$2_1,$2_2,$c) => { return h$base_link($1_1,$1_2,$2_1,$2_2,$c); })"
+ c_link :: CString -> CString -> IO CInt
+foreign import javascript interruptible "(($1_1,$1_2,$2,$c) => { return h$base_mkfifo($1_1,$1_2,$2,$c); })"
+ c_mkfifo :: CString -> CMode -> IO CInt
+foreign import javascript interruptible "(($1_1,$1_2,$c) => { return h$base_pipe($1_1,$1_2,$c); })"
+ c_pipe :: Ptr CInt -> IO CInt
+foreign import javascript unsafe "(($1_1,$1_2) => { return h$base_sigemptyset($1_1,$1_2); })"
+ c_sigemptyset :: Ptr CSigset -> IO CInt
+foreign import javascript unsafe "(($1_1,$1_2,$2) => { return h$base_sigaddset($1_1,$1_2,$2); })"
+ c_sigaddset :: Ptr CSigset -> CInt -> IO CInt
+foreign import javascript unsafe "(($1,$2_1,$2_2,$3_1,$3_2) => { return h$base_sigprocmask($1,$2_1,$2_2,$3_1,$3_2); })"
+ c_sigprocmask :: CInt -> Ptr CSigset -> Ptr CSigset -> IO CInt
+foreign import javascript unsafe "(($1,$2_1,$2_2) => { return h$base_tcgetattr($1,$2_1,$2_2); })"
+ c_tcgetattr :: CInt -> Ptr CTermios -> IO CInt
+foreign import javascript unsafe "(($1,$2,$3_1,$3_2) => { return h$base_tcsetattr($1,$2,$3_1,$3_2); })"
+ c_tcsetattr :: CInt -> CInt -> Ptr CTermios -> IO CInt
+foreign import javascript unsafe "(($1_1,$1_2,$2_1,$2_2) => { return h$base_utime($1_1,$1_2,$2_1,$2_2); })" -- should this be async?
+ c_utime :: CString -> Ptr CUtimbuf -> IO CInt
+foreign import javascript interruptible "(($1,$2_1,$2_2,$3,$c) => { return h$base_waitpid($1,$2_1,$2_2,$3,$c); })"
+ c_waitpid :: CPid -> Ptr CInt -> CInt -> IO CPid
+
+foreign import javascript unsafe "(() => { return h$base_o_rdonly; })" o_RDONLY :: CInt
+foreign import javascript unsafe "(() => { return h$base_o_wronly; })" o_WRONLY :: CInt
+foreign import javascript unsafe "(() => { return h$base_o_rdwr; })" o_RDWR :: CInt
+foreign import javascript unsafe "(() => { return h$base_o_append; })" o_APPEND :: CInt
+foreign import javascript unsafe "(() => { return h$base_o_creat; })" o_CREAT :: CInt
+foreign import javascript unsafe "(() => { return h$base_o_excl; })" o_EXCL :: CInt
+foreign import javascript unsafe "(() => { return h$base_o_trunc; })" o_TRUNC :: CInt
+foreign import javascript unsafe "(() => { return h$base_o_noctty; })" o_NOCTTY :: CInt
+foreign import javascript unsafe "(() => { return h$base_o_nonblock; })" o_NONBLOCK :: CInt
+foreign import javascript unsafe "(() => { return h$base_o_binary; })" o_BINARY :: CInt
+
+foreign import javascript unsafe "(($1) => { return h$base_c_s_isreg($1); })" c_s_isreg :: CMode -> CInt
+foreign import javascript unsafe "(($1) => { return h$base_c_s_ischr($1); })" c_s_ischr :: CMode -> CInt
+foreign import javascript unsafe "(($1) => { return h$base_c_s_isblk($1); })" c_s_isblk :: CMode -> CInt
+foreign import javascript unsafe "(($1) => { return h$base_c_s_isdir($1); })" c_s_isdir :: CMode -> CInt
+foreign import javascript unsafe "(($1) => { return h$base_c_s_isfifo($1); })" c_s_isfifo :: CMode -> CInt
+
+s_isreg :: CMode -> Bool
+s_isreg cm = c_s_isreg cm /= 0
+s_ischr :: CMode -> Bool
+s_ischr cm = c_s_ischr cm /= 0
+s_isblk :: CMode -> Bool
+s_isblk cm = c_s_isblk cm /= 0
+s_isdir :: CMode -> Bool
+s_isdir cm = c_s_isdir cm /= 0
+s_isfifo :: CMode -> Bool
+s_isfifo cm = c_s_isfifo cm /= 0
+
+foreign import javascript unsafe "(() => { return h$base_sizeof_stat; })" sizeof_stat :: Int
+foreign import javascript unsafe "(($1_1,$1_2) => { return h$base_st_mtime($1_1,$1_2); })" st_mtime :: Ptr CStat -> IO CTime
+foreign import javascript unsafe "(($1_1,$1_2) => { return h$base_st_size($1_1,$1_2); })" st_size :: Ptr CStat -> IO Int64
+foreign import javascript unsafe "(($1_1,$1_2) => { return h$base_st_mode($1_1,$1_2); })" st_mode :: Ptr CStat -> IO CMode
+foreign import javascript unsafe "(($1_1,$1_2) => { return h$base_st_dev($1_1,$1_2); })" st_dev :: Ptr CStat -> IO CDev
+foreign import javascript unsafe "(($1_1,$1_2) => { return h$base_st_ino($1_1,$1_2); })" st_ino :: Ptr CStat -> IO CIno
+
+foreign import javascript unsafe "(() => { return h$base_echo; })" const_echo :: CInt
+foreign import javascript unsafe "(() => { return h$base_tcsanow; })" const_tcsanow :: CInt
+foreign import javascript unsafe "(() => { return h$base_icanon; })" const_icanon :: CInt
+foreign import javascript unsafe "(() => { return h$base_vmin; })" const_vmin :: CInt
+foreign import javascript unsafe "(() => { return h$base_vtime; })" const_vtime :: CInt
+foreign import javascript unsafe "(() => { return h$base_sigttou; })" const_sigttou :: CInt
+foreign import javascript unsafe "(() => { return h$base_sig_block; })" const_sig_block :: CInt
+foreign import javascript unsafe "(() => { return h$base_sig_setmask; })" const_sig_setmask :: CInt
+foreign import javascript unsafe "(() => { return h$base_f_getfl; })" const_f_getfl :: CInt
+foreign import javascript unsafe "(() => { return h$base_f_setfl; })" const_f_setfl :: CInt
+foreign import javascript unsafe "(() => { return h$base_f_setfd; })" const_f_setfd :: CInt
+foreign import javascript unsafe "(() => { return h$base_fd_cloexec; })" const_fd_cloexec :: CLong
+foreign import javascript unsafe "(() => { return h$base_sizeof_termios; })" sizeof_termios :: Int
+foreign import javascript unsafe "(() => { return h$base_sizeof_sigset_t; })" sizeof_sigset_t :: Int
+foreign import javascript unsafe "(($1_1,$1_2) => { return h$base_lflag($1_1,$1_2); })" c_lflag :: Ptr CTermios -> IO CTcflag
+foreign import javascript unsafe "(($1_1,$1_2,$2) => { return h$base_poke_lflag($1_1,$1_2,$2); })" poke_c_lflag :: Ptr CTermios -> CTcflag -> IO ()
+foreign import javascript unsafe "(($1_1,$1_2) => { return h$base_ptr_c_cc($1_1,$1_2); })" ptr_c_cc :: Ptr CTermios -> IO (Ptr Word8)
+s_issock :: CMode -> Bool
+s_issock cmode = c_s_issock cmode /= 0
+foreign import javascript unsafe "(($1) => { return h$base_c_s_issock($1); })" c_s_issock :: CMode -> CInt
+foreign import javascript unsafe "(() => { return h$base_default_buffer_size; })" dEFAULT_BUFFER_SIZE :: Int
+foreign import javascript unsafe "(() => { return h$base_SEEK_CUR; })" sEEK_CUR :: CInt
+foreign import javascript unsafe "(() => { return h$base_SEEK_SET; })" sEEK_SET :: CInt
+foreign import javascript unsafe "(() => { return h$base_SEEK_END; })" sEEK_END :: CInt
+
+-- fixme, unclear if these can be supported, remove?
+foreign import javascript unsafe "(($1, $2) => { return h$base_c_fcntl_read($1,$2); })" c_fcntl_read :: CInt -> CInt -> IO CInt
+foreign import javascript unsafe "(($1, $2, $3) => { return h$base_c_fcntl_write($1,$2,$3); })" c_fcntl_write :: CInt -> CInt -> CLong -> IO CInt
+foreign import javascript unsafe "(($1,$2,$3_1,$3_2) => { return h$base_c_fcntl_lock($1,$2,$3_1,$3_2); })" c_fcntl_lock :: CInt -> CInt -> Ptr CFLock -> IO CInt
+
+#else
+
{- Note: Win32 POSIX functions
Functions that are not part of the POSIX standards were
at some point deprecated by Microsoft. This deprecation
@@ -576,13 +716,15 @@ foreign import ccall unsafe "HsBase.h getpid"
c_getpid :: IO CPid
#endif
+#if !defined(js_HOST_ARCH)
foreign import ccall unsafe "HsBase.h __hscore_stat"
c_stat :: CFilePath -> Ptr CStat -> IO CInt
foreign import ccall unsafe "HsBase.h __hscore_ftruncate"
c_ftruncate :: CInt -> COff -> IO CInt
+#endif
-#if !defined(mingw32_HOST_OS)
+#if !defined(mingw32_HOST_OS) && !defined(js_HOST_ARCH)
foreign import capi unsafe "HsBase.h fcntl"
c_fcntl_read :: CInt -> CInt -> IO CInt
@@ -647,6 +789,7 @@ foreign import ccall unsafe "HsBase.h waitpid"
c_waitpid :: CPid -> Ptr CInt -> CInt -> IO CPid
#endif
+#if !defined(js_HOST_ARCH)
-- POSIX flags only:
foreign import ccall unsafe "HsBase.h __hscore_o_rdonly" o_RDONLY :: CInt
foreign import ccall unsafe "HsBase.h __hscore_o_wronly" o_WRONLY :: CInt
@@ -723,6 +866,8 @@ foreign import ccall unsafe "__hscore_bufsiz" dEFAULT_BUFFER_SIZE :: Int
foreign import capi unsafe "stdio.h value SEEK_CUR" sEEK_CUR :: CInt
foreign import capi unsafe "stdio.h value SEEK_SET" sEEK_SET :: CInt
foreign import capi unsafe "stdio.h value SEEK_END" sEEK_END :: CInt
+#endif
+#endif
{-
Note: Windows types
diff --git a/libraries/base/System/Timeout.hs b/libraries/base/System/Timeout.hs
index 3cca893c4d..bf215c747a 100644
--- a/libraries/base/System/Timeout.hs
+++ b/libraries/base/System/Timeout.hs
@@ -17,7 +17,7 @@
-- TODO: Inspect is still suitable.
module System.Timeout ( Timeout, timeout ) where
-#if !defined(mingw32_HOST_OS)
+#if !defined(mingw32_HOST_OS) && !defined(js_HOST_ARCH)
import Control.Monad
import GHC.Event (getSystemTimerManager,
registerTimeout, unregisterTimeout)
@@ -99,7 +99,7 @@ timeout :: Int -> IO a -> IO (Maybe a)
timeout n f
| n < 0 = fmap Just f
| n == 0 = return Nothing
-#if !defined(mingw32_HOST_OS)
+#if !defined(mingw32_HOST_OS) && !defined(js_HOST_ARCH)
| rtsSupportsBoundThreads = do
-- In the threaded RTS, we use the Timer Manager to delay the
-- (fairly expensive) 'forkIO' call until the timeout has expired.
diff --git a/libraries/base/base.cabal b/libraries/base/base.cabal
index a8875f9d59..1af0d4b73b 100644
--- a/libraries/base/base.cabal
+++ b/libraries/base/base.cabal
@@ -361,20 +361,29 @@ Library
System.Environment.ExecutablePath
System.CPUTime.Utils
- c-sources:
- cbits/DarwinUtils.c
- cbits/PrelIOUtils.c
- cbits/SetEnv.c
- cbits/iconv.c
- cbits/inputReady.c
- cbits/md5.c
- cbits/primFloat.c
- cbits/sysconf.c
- cbits/fs.c
+ if !arch(js)
+ c-sources:
+ cbits/DarwinUtils.c
+ cbits/PrelIOUtils.c
+ cbits/SetEnv.c
+ cbits/iconv.c
+ cbits/inputReady.c
+ cbits/md5.c
+ cbits/primFloat.c
+ cbits/sysconf.c
+ cbits/fs.c
- cmm-sources:
- cbits/CastFloatWord.cmm
- cbits/StackCloningDecoding.cmm
+ cmm-sources:
+ cbits/CastFloatWord.cmm
+ cbits/StackCloningDecoding.cmm
+
+ if arch(js)
+ js-sources:
+ -- "platform" must be linked first because it defines global constants
+ -- (e.g. h$isNode)
+ jsbits/platform.js
+ jsbits/base.js
+ jsbits/errno.js
include-dirs: include
includes:
@@ -451,12 +460,22 @@ Library
System.CPUTime.Posix.RUsage
System.CPUTime.Unsupported
+ if arch(js)
+ other-modules:
+ System.CPUTime.Javascript
+
-- The Ports framework always passes this flag when building software that
-- uses iconv to make iconv from Ports compatible with iconv from the base system
-- See /usr/ports/Mk/Uses/iconv.mk
if os(freebsd)
cc-options: -DLIBICONV_PLUG
+ if arch(js)
+ exposed-modules:
+ GHC.JS.Prim
+ GHC.JS.Prim.Internal
+ GHC.JS.Prim.Internal.Build
+
-- We need to set the unit id to base (without a version number)
-- as it's magic.
ghc-options: -this-unit-id base
diff --git a/libraries/base/jsbits/base.js b/libraries/base/jsbits/base.js
new file mode 100644
index 0000000000..dd491bac00
--- /dev/null
+++ b/libraries/base/jsbits/base.js
@@ -0,0 +1,839 @@
+//#OPTIONS: CPP
+#include "HsBaseConfig.h"
+
+// #define GHCJS_TRACE_IO 1
+
+#ifdef GHCJS_TRACE_IO
+function h$logIO() { h$log.apply(h$log, arguments); }
+#define TRACE_IO(args...) h$logIO(args)
+#else
+#define TRACE_IO(args...)
+#endif
+
+function h$base_access(file, file_off, mode, c) {
+ TRACE_IO("base_access")
+#ifndef GHCJS_BROWSER
+ if(h$isNode()) {
+ h$fs.stat(fd, function(err, fs) {
+ if(err) {
+ h$handleErrnoC(err, -1, 0, c);
+ } else {
+ c(mode & fs.mode); // fixme is this ok?
+ }
+ });
+ } else
+#endif
+ h$unsupported(-1, c);
+}
+
+function h$base_chmod(file, file_off, mode, c) {
+ TRACE_IO("base_chmod")
+#ifndef GHCJS_BROWSER
+ if(h$isNode()) {
+ h$fs.chmod(h$decodeUtf8z(file, file_off), mode, function(err) {
+ h$handleErrnoC(err, -1, 0, c);
+ });
+ } else
+#endif
+ h$unsupported(-1, c);
+}
+
+function h$base_close(fd, c) {
+ TRACE_IO("base_close fd: " + fd)
+ var fdo = h$base_fds[fd];
+ if(fdo) {
+ delete h$base_fds[fd];
+ if(--fdo.refs < 1) {
+ TRACE_IO("base_close: closing underlying fd")
+ if(fdo.close) {
+ fdo.close(fd, fdo, c);
+ } else {
+ c(0);
+ }
+ } else {
+ TRACE_IO("base_close: remaining references, not closing underlying fd")
+ c(0);
+ }
+ } else {
+ TRACE_IO("base_close: file descriptor not found, already closed?")
+ h$errno = CONST_EINVAL;
+ c(-1);
+ }
+}
+
+function h$base_dup(fd, c) {
+ // h$log("h$base_dup al: " + arguments.length);
+ h$base_dup2(fd, h$base_fdN--, c);
+}
+
+function h$base_dup2(fd, new_fd, c) {
+ TRACE_IO("base_dup2 " + fd + " " + new_fd)
+ // if(new_fd >= 0 && new_fd <= 2) {
+
+ // }
+ // h$log("h$base_dup2 al: " + arguments.length);
+ // if(fd >= 0 && fd < 2) {
+ // h$errno = CONST_EINVAL;
+ // c(-1);
+ // fixme make sure it can't be called again!
+ // return;
+ // } // && new_fd )
+
+ /* Fixme:
+ The two descriptors do not share file descriptor flags
+ (the close-on-exec flag). The close-on-exec flag
+ (FD_CLOEXEC; see fcntl(2)) for the duplicate descriptor is off.
+ */
+ var fdo = h$base_fds[fd];
+ if(!fdo) {
+ TRACE_IO("file descriptor not found")
+ h$errno = CONST_EINVAL;
+ c(-1);
+ } else {
+ var new_fdo = h$base_fds[new_fd];
+ function f() {
+ h$base_fds[new_fd] = fdo;
+ fdo.refs++;
+ c(new_fd);
+ }
+ if(new_fdo) {
+ TRACE_IO("closing existing fd")
+ h$base_close(new_fd, f);
+ } else {
+ f();
+ } // h$new_fdo.close();
+ }
+}
+
+function h$base_fstat(fd, stat, stat_off, c) {
+ TRACE_IO("base_stat")
+#ifndef GHCJS_BROWSER
+ if(h$isNode()) {
+ h$fs.fstat(fd, function(err, fs) {
+ if(err) {
+ h$handleErrnoC(err, -1, 0, c);
+ } else {
+ h$base_fillStat(fs, stat, stat_off);
+ c(0);
+ }
+ });
+ } else
+#endif
+ h$unsupported(-1, c);
+}
+
+function h$base_isatty(fd) {
+ TRACE_IO("base_isatty " + fd)
+ // return 1; // fixme debug
+ var fdo = h$base_fds[fd];
+ if(fdo && typeof fdo.isatty !== 'undefined') {
+ if(typeof fdo.isatty === 'function') return fdo.isatty() ? 1 : 0;
+ return fdo.isatty ? 1 : 0;
+ }
+ return 0;
+}
+
+
+#define TWO_PWR_32_DBL_ 0x100000000
+#define TWO_PWR_63_DBL_ 0x8000000000000000
+#define CLOSEST_FLOAT_NUMBER(h,l) (((h)*TWO_PWR_32_DBL_) + ((l)>>>0))
+
+/**
+ * Returns a 64-bit represention of the given number.
+ * NaN will be returned as zero.
+ * Infinity is converted to max value and
+ * -Infinity to min value.
+ * @param {f} The number in question.
+ * @param {c} the continuation taking high and low bits
+ */
+function h$long_from_number(f,c) {
+ if (f > 0) {
+ if (f >= TWO_PWR_63_DBL_) {
+ // return max value
+ return c(0x7FFFFFFF,0xFFFFFFFF);
+ }
+ return c(f / TWO_PWR_32_DBL_, f);
+ } else if (f < 0) {
+ if (f <= -TWO_PWR_63_DBL_) {
+ // return min value
+ return c(0x80000000,0);
+ }
+ var h = -f / TWO_PWR_32_DBL_;
+ var l = -f;
+ // negate h l
+ var nl = (~l + 1) | 0;
+ var nh = (~h + !nl) | 0;
+ return c(nh,nl);
+ } else {
+ // NaN or 0.
+ return c(0,0);
+ }
+}
+
+function h$base_lseek(fd, pos_h, pos_l, whence, c) {
+ TRACE_IO("base_lseek")
+#ifndef GHCJS_BROWSER
+ if(h$isNode()) {
+ var p = CLOSEST_FLOAT_NUMBER(pos_h,pos_l);
+ var o = h$base_fds[fd];
+ if(!o) {
+ h$errno = CONST_BADF;
+ c(-1,-1);
+ } else {
+ switch(whence) {
+ case 0: /* SET */
+ o.pos = p;
+ c(pos_h, pos_l);
+ break;
+ case 1: /* CUR */
+ o.pos += p;
+ h$long_from_number(o.pos,c);
+ break;
+ case 2: /* END */
+ h$fs.fstat(fd, function(err, fs) {
+ if(err) {
+ h$setErrno(err);
+ c(-1,-1);
+ } else {
+ o.pos = fs.size + p;
+ h$long_from_number(o.pos,c);
+ }
+ });
+ break;
+ default:
+ h$errno = CONST_EINVAL;
+ c(-1,-1);
+ }
+ }
+ } else {
+#endif
+ h$unsupported();
+ c(-1, -1);
+#ifndef GHCJS_BROWSER
+ }
+#endif
+}
+
+function h$base_lstat(file, file_off, stat, stat_off, c) {
+ TRACE_IO("base_lstat")
+#ifndef GHCJS_BROWSER
+ if(h$isNode()) {
+ h$fs.lstat(h$decodeUtf8z(file, file_off), function(err, fs) {
+ if(err) {
+ h$handleErrnoC(err, -1, 0, c);
+ } else {
+ h$base_fillStat(fs, stat, stat_off);
+ c(0);
+ }
+ });
+ } else
+#endif
+ h$unsupported(-1, c);
+}
+function h$base_open(file, file_off, how, mode, c) {
+#ifndef GHCJS_BROWSER
+ if(h$isNode()) {
+ var flags, off;
+ var fp = h$decodeUtf8z(file, file_off);
+ TRACE_IO("base_open: " + fp)
+ var acc = how & h$base_o_accmode;
+ // passing a number lets node.js use it directly as the flags (undocumented)
+ if(acc === h$base_o_rdonly) {
+ flags = h$processConstants['fs']['O_RDONLY'];
+ } else if(acc === h$base_o_wronly) {
+ flags = h$processConstants['fs']['O_WRONLY'];
+ } else { // r+w
+ flags = h$processConstants['fs']['O_RDWR'];
+ }
+ off = (how & h$base_o_append) ? -1 : 0;
+ flags = flags | ((how & h$base_o_trunc) ? h$processConstants['fs']['O_TRUNC'] : 0)
+ | ((how & h$base_o_creat) ? h$processConstants['fs']['O_CREAT'] : 0)
+ | ((how & h$base_o_excl) ? h$processConstants['fs']['O_EXCL'] : 0)
+ | ((how & h$base_o_append) ? h$processConstants['fs']['O_APPEND'] : 0);
+ h$fs.open(fp, flags, mode, function(err, fd) {
+ if(err) {
+ h$handleErrnoC(err, -1, 0, c);
+ } else {
+ var f = function(p) {
+ h$base_fds[fd] = { read: h$base_readFile
+ , write: h$base_writeFile
+ , close: h$base_closeFile
+ , fd: fd
+ , pos: p
+ , refs: 1
+ };
+ TRACE_IO("base_open: " + fp + " -> " + fd)
+ c(fd);
+ }
+ if(off === -1) {
+ h$fs.stat(fp, function(err, fs) {
+ if(err) h$handleErrnoC(err, -1, 0, c); else f(fs.size);
+ });
+ } else {
+ f(0);
+ }
+ }
+ });
+ } else
+#endif
+ h$unsupported(-1, c);
+}
+function h$base_read(fd, buf, buf_off, n, c) {
+ TRACE_IO("base_read: " + fd)
+ var fdo = h$base_fds[fd];
+ if(fdo && fdo.read) {
+ fdo.read(fd, fdo, buf, buf_off, n, c);
+ } else {
+ h$fs.read(fd, buf.u8, buf_off, n, null, function(err, bytesRead, buf0) {
+ h$handleErrnoC(err, -1, bytesRead, c);
+ });
+ }
+}
+function h$base_stat(file, file_off, stat, stat_off, c) {
+ TRACE_IO("base_stat")
+#ifndef GHCJS_BROWSER
+ if(h$isNode()) {
+ h$fs.stat(h$decodeUtf8z(file, file_off), function(err, fs) {
+ if(err) {
+ h$handleErrnoC(err, -1, 0, c);
+ } else {
+ h$base_fillStat(fs, stat, stat_off);
+ c(0);
+ }
+ });
+ } else
+#endif
+ h$unsupported(-1, c);
+}
+function h$base_umask(mode) {
+ TRACE_IO("base_umask: " + mode)
+#ifndef GHCJS_BROWSER
+ if(h$isNode()) return process.umask(mode);
+#endif
+ return 0;
+}
+
+function h$base_write(fd, buf, buf_off, n, c) {
+// fd: file descriptor number
+// buf: buffer to write
+// buf_off: offset in the buffer
+// n: number of bytes to write
+// c: continuation
+ TRACE_IO("base_write: " + fd)
+
+ var fdo = h$base_fds[fd];
+
+ if(fdo && fdo.write) {
+ fdo.write(fd, fdo, buf, buf_off, n, c);
+ } else {
+ h$fs.write(fd, buf.u8, buf_off, n, function(err, bytesWritten, buf0) {
+ h$handleErrnoC(err, -1, bytesWritten, c);
+ });
+ }
+}
+
+function h$base_ftruncate(fd, pos_h, pos_l, c) {
+ TRACE_IO("base_ftruncate")
+#ifndef GHCJS_BROWSER
+ if(h$isNode()) {
+ h$fs.ftruncate(fd, CLOSEST_FLOAT_NUMBER(pos_h,pos_l), function(err) {
+ h$handleErrnoC(err, -1, 0, c);
+ });
+ } else
+#endif
+ h$unsupported(-1, c);
+}
+function h$base_unlink(file, file_off, c) {
+ TRACE_IO("base_unlink")
+#ifndef GHCJS_BROWSER
+ if(h$isNode()) {
+ h$fs.unlink(h$decodeUtf8z(file, file_off), function(err) {
+ h$handleErrnoC(err, -1, 0, c);
+ });
+ } else
+#endif
+ h$unsupported(-1, c);
+}
+function h$base_getpid() {
+ TRACE_IO("base_getpid")
+#ifndef GHCJS_BROWSER
+ if(h$isNode()) return process.pid;
+#endif
+ return 0;
+}
+function h$base_link(file1, file1_off, file2, file2_off, c) {
+ TRACE_IO("base_link")
+#ifndef GHCJS_BROWSER
+ if(h$isNode()) {
+ h$fs.link(h$decodeUtf8z(file1, file1_off), h$decodeUtf8z(file2, file2_off), function(err) {
+ h$handleErrnoC(err, -1, 0, c);
+ });
+ } else
+#endif
+ h$unsupported(-1, c);
+}
+function h$base_mkfifo(file, file_off, mode, c) {
+ throw "h$base_mkfifo";
+}
+function h$base_sigemptyset(sigset, sigset_off) {
+ return 0;
+ // throw "h$base_sigemptyset";
+}
+function h$base_sigaddset(sigset, sigset_off, sig) {
+ return 0;
+ // throw "h$base_sigaddset";
+}
+function h$base_sigprocmask(sig, sigset1, sigset1_off, sigset2, sigset2_off) {
+ return 0;
+ // throw "h$base_sigprocmask";
+}
+function h$base_tcgetattr(attr, termios, termios_off) {
+ return 0;
+}
+function h$base_tcsetattr(attr, val, termios, termios_off) {
+ return 0;
+}
+function h$base_utime(file, file_off, timbuf, timbuf_off, c) {
+ TRACE_IO("base_utime")
+#ifndef GHCJS_BROWSER
+ if(h$isNode()) {
+ h$fs.fstat(h$decodeUtf8z(file, file_off), function(err, fs) {
+ if(err) {
+ h$handleErrnoC(err, 0, -1, c); // fixme
+ } else {
+ h$long_from_number(fs.atime.getTime(), (h,l) => {
+ timbuf.i3[0] = h;
+ timbuf.i3[1] = l;
+ });
+ h$long_from_number(fs.mtime.getTime(), (h,l) => {
+ timbuf.i3[2] = h;
+ timbuf.i3[3] = l;
+ });
+ h$long_from_number(fs.ctime.getTime(), (h,l) => {
+ timbuf.i3[4] = h;
+ timbuf.i3[5] = l;
+ });
+ c(0);
+ }
+ });
+ } else
+#endif
+ h$unsupported(-1, c);
+}
+function h$base_waitpid(pid, stat, stat_off, options, c) {
+ throw "h$base_waitpid";
+}
+/** @const */ var h$base_o_rdonly = 0x00000;
+/** @const */ var h$base_o_wronly = 0x00001;
+/** @const */ var h$base_o_rdwr = 0x00002;
+/** @const */ var h$base_o_accmode = 0x00003;
+/** @const */ var h$base_o_append = 0x00008;
+/** @const */ var h$base_o_creat = 0x00200;
+/** @const */ var h$base_o_trunc = 0x00400;
+/** @const */ var h$base_o_excl = 0x00800;
+/** @const */ var h$base_o_noctty = 0x20000;
+/** @const */ var h$base_o_nonblock = 0x00004;
+/** @const */ var h$base_o_binary = 0x00000;
+
+function h$base_c_s_isreg(mode) {
+ return 1;
+}
+function h$base_c_s_ischr(mode) {
+ return 0;
+}
+function h$base_c_s_isblk(mode) {
+ return 0;
+}
+function h$base_c_s_isdir(mode) {
+ return 0; // fixme
+}
+function h$base_c_s_isfifo(mode) {
+ return 0;
+}
+
+#ifndef GHCJS_BROWSER
+function h$base_fillStat(fs, b, off) {
+ if(off%4) throw "h$base_fillStat: not aligned";
+ var o = off>>2;
+ b.i3[o+0] = fs.mode;
+ h$long_from_number(fs.size, (h,l) => {
+ b.i3[o+1] = h;
+ b.i3[o+2] = l;
+ });
+
+ b.i3[o+3] = 0; // fixme
+ b.i3[o+4] = 0; // fixme
+ b.i3[o+5] = fs.dev;
+ h$long_from_number(fs.ino, (h,l) => {
+ b.i3[o+6] = h;
+ b.i3[o+7] = l;
+ });
+ b.i3[o+8] = fs.uid;
+ b.i3[o+9] = fs.gid;
+}
+#endif
+
+// [mode,size1,size2,mtime1,mtime2,dev,ino1,ino2,uid,gid] all 32 bit
+/** @const */ var h$base_sizeof_stat = 40;
+
+function h$base_st_mtime(stat, stat_off) {
+ RETURN_UBX_TUP2(stat.i3[(stat_off>>2)+3], stat.i3[(stat_off>>2)+4]);
+}
+
+function h$base_st_size(stat, stat_off) {
+ RETURN_UBX_TUP2(stat.i3[(stat_off>>2)+1], stat.i3[(stat_off>>2)+2]);
+}
+
+function h$base_st_mode(stat, stat_off) {
+ return stat.i3[stat_off>>2];
+}
+
+function h$base_st_dev(stat, stat_off) {
+ return stat.i3[(stat_off>>2)+5];
+}
+
+function h$base_st_ino(stat, stat_off) {
+ RETURN_UBX_TUP2(stat.i3[(stat_off>>2)+6], stat.i3[(stat_off>>2)+7]);
+}
+
+/** @const */ var h$base_echo = 1;
+/** @const */ var h$base_tcsanow = 2;
+/** @const */ var h$base_icanon = 4;
+/** @const */ var h$base_vmin = 8;
+/** @const */ var h$base_vtime = 16;
+/** @const */ var h$base_sigttou = 0;
+/** @const */ var h$base_sig_block = 0;
+/** @const */ var h$base_sig_setmask = 0;
+/** @const */ var h$base_f_getfl = 0;
+/** @const */ var h$base_f_setfl = 0;
+/** @const */ var h$base_f_setfd = 0;
+/** @const */ var h$base_fd_cloexec = 0;
+/** @const */ var h$base_sizeof_termios = 4;
+/** @const */ var h$base_sizeof_sigset_t = 4;
+
+function h$base_lflag(termios, termios_off) {
+ return 0;
+}
+
+function h$base_poke_lflag(termios, termios_off, flag) {
+ return 0;
+}
+
+function h$base_ptr_c_cc(termios, termios_off) {
+ RETURN_UBX_TUP2(h$newByteArray(8), 0);
+}
+
+/** @const */ var h$base_default_buffer_size = 32768;
+
+function h$base_c_s_issock(mode) {
+ return 0; // fixme
+}
+
+/** @const */ var h$base_SEEK_SET = 0;
+/** @const */ var h$base_SEEK_CUR = 1;
+/** @const */ var h$base_SEEK_END = 2;
+
+function h$base_set_saved_termios(a, b, c) {
+ RETURN_UBX_TUP2(null, 0);
+}
+
+function h$base_get_saved_termios(r) {
+ RETURN_UBX_TUP2(null, 0);
+}
+
+// fixme
+function h$lockFile(fd, dev, ino, for_writing) {
+ TRACE_IO("lockFile:" + fd)
+ return 0;
+}
+function h$unlockFile(fd) {
+ TRACE_IO("unlockFile:" + fd)
+ return 0;
+}
+
+
+
+// engine-dependent setup
+var h$base_readStdin , h$base_writeStderr, h$base_writeStdout;
+var h$base_isattyStdin = false, h$base_isattyStdout = false, h$base_isattyStderr = false;
+var h$base_closeStdin = null, h$base_closeStderr = null, h$base_closeStdout = null;
+var h$base_readFile, h$base_writeFile, h$base_closeFile;
+#ifndef GHCJS_BROWSER
+var h$base_stdin_waiting = new h$Queue();
+var h$base_stdin_chunk = { buf: null
+ , pos: 0
+ , processing: false
+ };
+var h$base_stdin_eof = false;
+var h$base_process_stdin = function() {
+ var c = h$base_stdin_chunk;
+ var q = h$base_stdin_waiting;
+ if(!q.length() || c.processing) return;
+ c.processing = true;
+ if(!c.buf) { c.pos = 0; c.buf = process.stdin.read(); }
+ while(c.buf && q.length()) {
+ var x = q.dequeue();
+ var n = Math.min(c.buf.length - c.pos, x.n);
+ for(var i=0;i<n;i++) {
+ x.buf.u8[i+x.off] = c.buf[c.pos+i];
+ }
+ c.pos += n;
+ x.c(n);
+ if(c.pos >= c.buf.length) c.buf = null;
+ if(!c.buf && q.length()) { c.pos = 0; c.buf = process.stdin.read(); }
+ }
+ while(h$base_stdin_eof && q.length()) q.dequeue().c(0);
+ c.processing = false;
+}
+
+if(h$isNode()) {
+ h$base_closeFile = function(fd, fdo, c) {
+ TRACE_IO("base_closeFile: " + fd + " (" + fdo.fd + ")")
+ var real_fd = typeof fdo.fd === 'number' ? fdo.fd : fd;
+ h$fs.close(real_fd, function(err) {
+ delete h$base_fds[fd];
+ h$handleErrnoC(err, -1, 0, c);
+ });
+ }
+
+ h$base_readFile = function(fd, fdo, buf, buf_offset, n, c) {
+ var pos = typeof fdo.pos === 'number' ? fdo.pos : null;
+ TRACE_IO("base_readFile: " + fd + " (" + fdo.fd + ") " + pos + " " + buf_offset + " " + n)
+ var real_fd = typeof fdo.fd === 'number' ? fdo.fd : fd;
+ h$fs.read(real_fd, Buffer.alloc(n), 0, n, pos, function(err, bytesRead, nbuf) {
+ if(err) {
+ h$setErrno(err);
+ c(-1);
+ } else {
+ for(var i=bytesRead-1;i>=0;i--) buf.u8[buf_offset+i] = nbuf[i];
+ if(typeof fdo.pos === 'number') fdo.pos += bytesRead;
+ c(bytesRead);
+ }
+ });
+ }
+
+ h$base_readStdin = function(fd, fdo, buf, buf_offset, n, c) {
+ TRACE_IO("read stdin")
+ h$base_stdin_waiting.enqueue({buf: buf, off: buf_offset, n: n, c: c});
+ h$base_process_stdin();
+ }
+
+ h$base_closeStdin = function(fd, fdo, c) {
+ TRACE_IO("close stdin")
+ // process.stdin.close(); fixme
+ c(0);
+ }
+
+ h$base_writeFile = function(fd, fdo, buf, buf_offset, n, c) {
+ var pos = typeof fdo.pos === 'number' ? fdo.pos : null;
+ TRACE_IO("base_writeFile: " + fd + " (" + fdo.fd + ") " + pos + " " + buf_offset + " " + n)
+ var nbuf = Buffer.alloc(n);
+ for(var i=0;i<n;i++) nbuf[i] = buf.u8[i+buf_offset];
+ var real_fd = typeof fdo.fd === 'number' ? fdo.fd : fd;
+ if(typeof fdo.pos === 'number') fdo.pos += n;
+ h$fs.write(real_fd, nbuf, 0, n, pos, function(err, bytesWritten) {
+ TRACE_IO("written file: " + fd + " (" + fdo.fd + ")")
+ if(err) {
+ h$setErrno(err);
+ if(typeof fdo.pos === 'number') fdo.pos -= n;
+ if(h$errno === CONST_EAGAIN)
+ setTimeout(function() { h$base_writeFile(fd, fdo, buf, buf_offset, n, c); }, 20);
+ else c(-1);
+ } else {
+ if(typeof fdo.pos === 'number') fdo.pos += bytesWritten - n;
+ c(bytesWritten);
+ }
+ });
+ }
+
+ h$base_writeStdout = function(fd, fdo, buf, buf_offset, n, c) {
+ TRACE_IO("write stdout")
+ h$base_writeFile(1, fdo, buf, buf_offset, n, c);
+ }
+
+ h$base_closeStdout = function(fd, fdo, c) {
+ TRACE_IO("close stdout")
+ // not actually closed, fixme?
+ c(0);
+ }
+
+ h$base_writeStderr = function(fd, fdo, buf, buf_offset, n, c) {
+ TRACE_IO("write stderr")
+ h$base_writeFile(2, fdo, buf, buf_offset, n, c);
+ }
+
+ h$base_closeStderr = function(fd, fdo, c) {
+ TRACE_IO("close stderr")
+ // not actually closed, fixme?
+ c(0);
+ }
+
+ process.stdin.on('readable', h$base_process_stdin);
+ process.stdin.on('end', function() { h$base_stdin_eof = true; h$base_process_stdin(); });
+
+ h$base_isattyStdin = function() { return process.stdin.isTTY; };
+ h$base_isattyStdout = function() { return process.stdout.isTTY; };
+ h$base_isattyStderr = function() { return process.stderr.isTTY; };
+
+} else if (h$isJsShell()) {
+ h$base_readStdin = function(fd, fdo, buf, buf_offset, n, c) {
+ c(0);
+ }
+ h$base_writeStdout = function(fd, fdo, buf, buf_offset, n, c) {
+ putstr(h$decodeUtf8(buf, n, buf_offset));
+ c(n);
+ }
+ h$base_writeStderr = function(fd, fdo, buf, buf_offset, n, c) {
+ printErr(h$decodeUtf8(buf, n, buf_offset));
+ c(n);
+ }
+} else if(h$isJsCore()) {
+ h$base_readStdin = function(fd, fdo, buf, buf_offset, n, c) {
+ c(0);
+ }
+ var h$base_stdoutLeftover = { f: print, val: null };
+ var h$base_stderrLeftover = { f: debug, val: null };
+ var h$base_writeWithLeftover = function(buf, n, buf_offset, c, lo) {
+ var lines = h$decodeUtf8(buf, n, buf_offset).split(/\r?\n/);
+ if(lines.length === 1) {
+ if(lines[0].length) {
+ if(lo.val !== null) lo.val += lines[0];
+ else lo.val = lines[0];
+ }
+ } else {
+ lo.f(((lo.val !== null) ? lo.val : '') + lines[0]);
+ for(var i=1;i<lines.length-1;i++) lo.f(lines[i]);
+ if(lines[lines.length-1].length) lo.val = lines[lines.length-1];
+ else lo.val = null;
+ }
+ c(n);
+ }
+ h$base_writeStdout = function(fd, fdo, buf, buf_offset, n, c) {
+ h$base_writeWithLeftover(buf, n, buf_offset, c, h$base_stdoutLeftover);
+ }
+ h$base_writeStderr = function(fd, fdo, buf, buf_offset, n, c) {
+ // writing to stderr not supported, write to stdout
+ h$base_writeWithLeftover(buf, n, buf_offset, c, h$base_stderrLeftover);
+ }
+} else { // browser / fallback
+#endif
+ h$base_readStdin = function(fd, fdo, buf, buf_offset, n, c) {
+ c(0);
+ }
+ h$base_writeStdout = function(fd, fdo, buf, buf_offset, n, c) {
+ console.log(h$decodeUtf8(buf, n, buf_offset));
+ c(n);
+ }
+ h$base_writeStderr = function(fd, fdo, buf, buf_offset, n, c) {
+ console.log(h$decodeUtf8(buf, n, buf_offset));
+ c(n);
+ }
+#ifndef GHCJS_BROWSER
+}
+#endif
+
+var h$base_stdin_fd =
+ { read: h$base_readStdin
+ , close: h$base_closeStdin
+ , isatty: h$base_isattyStdin
+ , refs: 1
+ };
+var h$base_stdout_fd =
+ { write: h$base_writeStdout
+ , close: h$base_closeStdout
+ , isatty: h$base_isattyStdout
+ , refs: 1
+ };
+var h$base_stderr_fd =
+ { write: h$base_writeStderr
+ , close: h$base_closeStderr
+ , isatty: h$base_isattyStderr
+ , refs: 1
+ };
+
+var h$base_fdN = -2; // negative file descriptors are 'virtual', -1 is already used to indicated error
+var h$base_fds = [h$base_stdin_fd, h$base_stdout_fd, h$base_stderr_fd];
+
+function h$shutdownHaskellAndExit(code, fast) {
+#ifndef GHCJS_BROWSER
+#ifdef GHCJS_LOG_BUFFER
+ if(h$isNode()) console.log(h$logBuffer);
+ if(h$isJsShell() || h$isJsCore()) print(h$logBuffer);
+#endif
+#endif
+ h$exitProcess(code);
+}
+
+// RAND_MAX = 32767
+function h$rand() {
+ return (32768 * Math.random()) & 32767;
+}
+
+// SIGUSR1, SIGTERM, SIGINT, SIGPIPE, SIGHUP, SIGTERM, SIGINT
+// SIGBREAK, SIGWINCH, SIGKILL, SIGSTOP, SIGBUS, SIGFPE
+// SIGSEGV, SIGILL
+
+// returns old action code
+function h$stg_sig_install(sigNo, actionCode, sigSet_d, sigSet_o) {
+ // XXX dummy implementation
+ return 0;
+}
+
+const h$putchar_buf = h$newByteArray(1);
+
+function h$putchar(c) {
+ h$putchar_buf.u8[0] = c;
+ h$base_write(1, h$putchar_buf, 0, 1, null);
+ return h$errno;
+}
+
+function h$__hscore_set_errno(n) {
+ h$errno = n;
+}
+
+/*******************************************
+ * Directory API
+ *******************************************/
+
+function h$opendir(path) {
+ if(!h$isNode()) {
+ throw "h$opendir unsupported";
+ }
+
+ const d = fs.opendirSync(h$decodeUtf8z(path,0));
+ RETURN_UBX_TUP2(d,0);
+}
+
+function h$closedir(d,o) {
+ if(!h$isNode()) {
+ throw "h$closedir unsupported";
+ }
+ d.closeSync();
+ return 0;
+}
+
+function h$readdir(d,o) {
+ if(!h$isNode()) {
+ throw "h$readdir unsupported";
+ }
+ const c = d.readSync();
+ RETURN_UBX_TUP2(c,0);
+}
+
+function h$__hscore_readdir(d,o,dst_a,dst_o) {
+ if(!h$isNode()) {
+ throw "h$readdir unsupported";
+ }
+ const e = d.readSync();
+
+ if (!dst_a.arr) dst_a.arr = [];
+ dst_a.arr[dst_o*2] = [e,0];
+ return 0;
+}
+
+function h$__hscore_free_dirent(a,o) {
+}
+
+function h$__hscore_d_name(a,o) {
+ RETURN_UBX_TUP2(h$encodeModifiedUtf8(a.name),0);
+}
diff --git a/libraries/base/jsbits/errno.js b/libraries/base/jsbits/errno.js
new file mode 100644
index 0000000000..185f799186
--- /dev/null
+++ b/libraries/base/jsbits/errno.js
@@ -0,0 +1,102 @@
+//#OPTIONS: CPP
+
+#include "HsBaseConfig.h"
+
+#ifdef GHCJS_TRACE_ERRNO
+function h$logErrno() { h$log.apply(h$log,arguments); }
+#define TRACE_ERRNO(args...) h$logErrno(args)
+#else
+#define TRACE_ERRNO(args...)
+#endif
+
+var h$errno = 0;
+
+function h$__hscore_get_errno() {
+ TRACE_ERRNO("hscore_get_errno: " + h$errno);
+ return h$errno;
+}
+
+function h$unsupported(status, c) {
+ h$errno = 12456;
+ if(c) c(status);
+ return status;
+}
+
+function h$strerror(err) {
+ if(err === 12456) {
+ RETURN_UBX_TUP2(h$encodeUtf8("operation unsupported on this platform"), 0);
+ }
+#ifdef GHCJS_BROWSER
+ RETURN_UBX_TUP2(h$encodeUtf8("unknown error"), 0);
+#else
+ RETURN_UBX_TUP2(h$encodeUtf8(h$errorStrs[err] || "unknown error"), 0);
+#endif
+}
+
+#ifndef GHCJS_BROWSER
+function h$setErrno(e) {
+ TRACE_ERRNO("setErrno: " + e);
+ var es = e.toString();
+ var getErr = function() {
+ if(es.indexOf('ENOTDIR') !== -1) return CONST_ENOTDIR;
+ if(es.indexOf('EISDIR') !== -1) return CONST_EISDIR;
+ if(es.indexOf('ENOENT') !== -1) return CONST_ENOENT;
+ if(es.indexOf('EEXIST') !== -1) return CONST_EEXIST;
+ if(es.indexOf('ENETUNREACH') !== -1) return CONST_EINVAL; // fixme
+ if(es.indexOf('EPERM') !== -1) return CONST_EPERM;
+ if(es.indexOf('EMFILE') !== -1) return CONST_EMFILE;
+ if(es.indexOf('EPIPE') !== -1) return CONST_EPIPE;
+ if(es.indexOf('EAGAIN') !== -1) return CONST_EAGAIN;
+ if(es.indexOf('EINVAL') !== -1) return CONST_EINVAL;
+ if(es.indexOf('ESPIPE') !== -1) return CONST_ESPIPE;
+ if(es.indexOf('EBADF') !== -1) return CONST_EBADF;
+ if(es.indexOf('Bad argument') !== -1) return CONST_ENOENT; // fixme?
+ throw ("setErrno not yet implemented: " + e);
+
+ }
+ h$errno = getErr();
+}
+
+var h$errorStrs = { CONST_E2BIG: "Argument list too long"
+ , CONST_EACCESS: "Permission denied"
+ , CONST_EINVAL: "Invalid argument"
+ , CONST_EBADF: "Bad file descriptor"
+ , CONST_ENOTDIR: "Not a directory"
+ , CONST_EISDIR: "Illegal operation on a directory"
+ , CONST_ENOENT: "No such file or directory"
+ , CONST_EPERM: "Operation not permitted"
+ , CONST_EEXIST: "File exists"
+ , CONST_EMFILE: "Too many open files"
+ , CONST_EPIPE: "Broken pipe"
+ , CONST_EAGAIN: "Resource temporarily unavailable"
+ , CONST_ESPIPE: "Illegal seek"
+ }
+
+function h$handleErrno(r_err, f) {
+ try {
+ return f();
+ } catch(e) {
+ h$setErrno(e);
+ return r_err;
+ }
+}
+
+function h$handleErrnoS(r_err, r_success, f) {
+ try {
+ f();
+ return r_success;
+ } catch(e) {
+ h$setErrno(e);
+ return r_err;
+ }
+}
+
+function h$handleErrnoC(err, r_err, r_success, c) {
+ if(err) {
+ h$setErrno(err);
+ c(r_err);
+ } else {
+ c(r_success);
+ }
+}
+#endif
diff --git a/libraries/base/jsbits/platform.js b/libraries/base/jsbits/platform.js
new file mode 100644
index 0000000000..2ecdee2189
--- /dev/null
+++ b/libraries/base/jsbits/platform.js
@@ -0,0 +1,111 @@
+//#OPTIONS: CPP
+
+/* platform-specific setup */
+
+/*
+ if browser mode is active (GHCJS_BROWSER is defined), all the runtime platform
+ detection code should be removed by the preprocessor. The h$isPlatform variables
+ are undeclared.
+
+ in non-browser mode, use h$isNode, h$isJsShell, h$isBrowser to find the current
+ platform.
+
+ more platforms should be added here in the future
+*/
+#ifndef GHCJS_BROWSER
+var h$isNode_ = false; // runtime is node.js
+var h$isJvm_ = false; // runtime is JVM
+var h$isJsShell_ = false; // runtime is SpiderMonkey jsshell
+var h$isJsCore_ = false; // runtime is JavaScriptCore jsc
+var h$isBrowser_ = false; // running in browser or everything else
+
+var h$isGHCJSi_ = false; // Code is GHCJSi (browser or node)
+
+function h$isNode() {
+ return h$isNode_;
+}
+
+function h$isJvm() {
+ return h$isJvm_;
+}
+
+function h$isJsShell() {
+ return h$isJsShell_;
+}
+
+function h$isJsCore() {
+ return h$isJsCore_;
+}
+
+function h$isBrowser() {
+ return h$isBrowser_;
+}
+
+function h$isGHCJSi() {
+ return h$isGHCJSi_;
+}
+
+// load all required node.js modules
+if(typeof process !== 'undefined' && (typeof h$TH !== 'undefined' || (typeof require !== 'undefined' && typeof module !== 'undefined' && module.exports))) {
+ h$isNode_ = true;
+ // we have to use these names for the closure compiler externs to work
+ var fs = require('fs');
+ var path = require('path');
+ var os = require('os');
+ var child_process = require('child_process');
+ var h$fs = fs;
+ var h$path = path;
+ var h$os = os;
+ var h$child = child_process;
+ var h$process = process;
+ function h$getProcessConstants() {
+ // this is a non-public API, but we need these values for things like file access modes
+ var cs = process['binding']('constants');
+ if(typeof cs.os === 'object' && typeof cs.fs === 'object') {
+ return cs;
+ } else {
+ // earlier node.js versions (4.x and older) have all constants directly in the constants object
+ // construct something that resembles the hierarchy of the object in new versions:
+ return { 'fs': cs
+ , 'crypto': cs
+ , 'os': { 'UV_UDP_REUSEADDR': cs['UV_UDP_REUSEADDR']
+ , 'errno': cs
+ , 'signals': cs
+ }
+ };
+ }
+ }
+ var h$processConstants = h$getProcessConstants();
+} else if(typeof Java !== 'undefined') {
+ h$isJvm_ = true;
+ this.console = {
+ log: function(s) {
+ java.lang.System.out.print(s);
+ }
+ };
+} else if(typeof snarf !== 'undefined' && typeof print !== 'undefined' && typeof quit !== 'undefined') {
+ h$isJsShell_ = true;
+ this.console = { log: this.print };
+} else if(typeof numberOfDFGCompiles !== 'undefined' && typeof jscStack !== 'undefined') {
+ h$isJsCore_ = true;
+} else {
+ h$isBrowser_ = true;
+}
+if(typeof global !== 'undefined' && global.h$GHCJSi) {
+ h$isGHCJSi_ = true;
+}
+#endif
+
+function h$getGlobal(that) {
+ if(typeof global !== 'undefined') return global;
+ return that;
+}
+
+#ifdef GHCJS_BROWSER
+// IE 8 doesn't support Date.now(), shim it
+if (!Date.now) {
+ Date.now = function now() {
+ return +(new Date);
+ };
+}
+#endif
diff --git a/libraries/base/tests/Concurrent/all.T b/libraries/base/tests/Concurrent/all.T
index f8826a08d3..05fdf1d303 100644
--- a/libraries/base/tests/Concurrent/all.T
+++ b/libraries/base/tests/Concurrent/all.T
@@ -1,3 +1,3 @@
test('Chan002', extra_run_opts('100'), compile_and_run, [''])
test('Chan003', extra_run_opts('200'), compile_and_run, [''])
-test('ThreadDelay001', normal, compile_and_run, [''])
+test('ThreadDelay001', js_broken(22374), compile_and_run, [''])
diff --git a/libraries/base/tests/IO/T21336/all.T b/libraries/base/tests/IO/T21336/all.T
index 39ccb04d6a..e1fbd3b22d 100644
--- a/libraries/base/tests/IO/T21336/all.T
+++ b/libraries/base/tests/IO/T21336/all.T
@@ -1,11 +1,13 @@
# N.B. /dev/full exists on Darwin but cannot be opened, failing with -EPERM
test('T21336a',
- [unless(opsys('linux') or opsys('freebsd'), skip)],
+ [unless(opsys('linux') or opsys('freebsd'), skip), js_broken(22261)],
compile_and_run, [''])
test('T21336b',
- [unless(opsys('linux') or opsys('freebsd'), skip)],
+ [unless(opsys('linux') or opsys('freebsd'), skip), js_broken(22352)],
makefile_test, [])
test('T21336c',
- [unless(opsys('linux') or opsys('freebsd'), skip)],
+ [ unless(opsys('linux') or opsys('freebsd'), skip)
+ , js_broken(22370)
+ ],
makefile_test, [])
diff --git a/libraries/base/tests/IO/all.T b/libraries/base/tests/IO/all.T
index 7cb99c0f7f..92cb93add5 100644
--- a/libraries/base/tests/IO/all.T
+++ b/libraries/base/tests/IO/all.T
@@ -10,9 +10,9 @@ test('IOError001', [omit_ways(['ghci']), set_stdin('IOError001.hs')],
test('IOError002', normal, compile_and_run, [''])
test('finalization001', normal, compile_and_run, [''])
test('hClose001', [], compile_and_run, [''])
-test('hClose002', [normalise_win32_io_errors], compile_and_run, [''])
+test('hClose002', [normalise_win32_io_errors, js_broken(22261)], compile_and_run, [''])
test('hFileSize001', normal, compile_and_run, [''])
-test('hFileSize002', [omit_ways(['ghci'])], compile_and_run, [''])
+test('hFileSize002', [omit_ways(['ghci']), js_broken(22261)], compile_and_run, [''])
test('hFlush001', [], compile_and_run, [''])
test('hGetBuffering001',
@@ -28,14 +28,14 @@ test('hGetPosn001', [], compile_and_run, ['-cpp'])
test('hIsEOF001', normal, compile_and_run, [''])
test('hIsEOF002', [], compile_and_run, ['-cpp'])
-test('hReady001', normal, compile_and_run, ['-cpp'])
+test('hReady001', js_broken(22374), compile_and_run, ['-cpp'])
# hReady002 tests that hReady returns False for a pipe that has no
# data to read. It relies on piping input from 'sleep 1', which doesn't
# work for the 'ghci' way because in that case we already pipe input from
# a script, so hence omit_ways(['ghci'])
test('hReady002', [cmd_prefix('sleep 1 |'), omit_ways(['ghci']),
- multi_cpu_race],
+ multi_cpu_race, js_broken(22374)],
compile_and_run, [''])
test('hSeek001', normal, compile_and_run, [''])
@@ -46,7 +46,10 @@ test('hSeek004', [], compile_and_run, ['-cpp'])
test('hSetBuffering002', set_stdin('hSetBuffering002.hs'), compile_and_run, [''])
test('hSetBuffering003',
- [omit_ways(['ghci']), set_stdin('hSetBuffering003.hs')],
+ [ omit_ways(['ghci'])
+ , set_stdin('hSetBuffering003.hs')
+ , js_broken(22261)
+ ],
compile_and_run, [''])
test('hSetBuffering004', set_stdin('hSetBuffering004.hs'), compile_and_run, [''])
@@ -61,34 +64,35 @@ test('misc001', [extra_run_opts('misc001.hs misc001.out')], compile_and_run,
test('openFile001', normal, compile_and_run, [''])
test('openFile002', [exit_code(1), normalise_win32_io_errors], compile_and_run, [''])
-test('openFile003', [normalise_win32_io_errors], compile_and_run, [''])
+test('openFile003', [normalise_win32_io_errors, js_broken(22374)], compile_and_run, [''])
test('openFile004', [], compile_and_run, [''])
-test('openFile005', [], compile_and_run, [''])
+test('openFile005', js_broken(22261), compile_and_run, [''])
test('openFile006', [], compile_and_run, [''])
-test('openFile007', [], compile_and_run, [''])
-test('openFile008', cmd_prefix('ulimit -n 1024; '), compile_and_run, [''])
+test('openFile007', js_broken(22261), compile_and_run, [''])
+test('openFile008', [js_broken(22349), cmd_prefix('ulimit -n 1024; ')], compile_and_run, [''])
test('openFile009', [], compile_and_run, [''])
test('putStr001', normal, compile_and_run, [''])
-test('readFile001', [], compile_and_run, [''])
+test('readFile001', js_broken(22261), compile_and_run, [''])
test('readwrite001', [], compile_and_run, ['-cpp'])
-test('readwrite002', [omit_ways(['ghci']), set_stdin('readwrite002.hs')],
+test('readwrite002', [omit_ways(['ghci']), set_stdin('readwrite002.hs'), js_broken(22374)],
compile_and_run, ['-cpp'])
test('readwrite003', [], compile_and_run, [''])
test('hGetBuf001',
- [
- when(fast(), skip),
- expect_fail_if_windows],
+ [ when(fast(), skip)
+ , expect_fail_if_windows
+ , js_broken(22374)
+ ],
compile_and_run, ['-package unix'])
test('hDuplicateTo001', [fragile_for(16819, concurrent_ways),
when(opsys('mingw32'), skip)], compile_and_run, [''])
-test('countReaders001', [], compile_and_run, [''])
+test('countReaders001', js_broken(22261), compile_and_run, [''])
test('concio001', [normal, multi_cpu_race],
makefile_test, ['test.concio001'])
@@ -115,7 +119,7 @@ test('encoding001', [], compile_and_run, [''])
test('encoding002', normal, compile_and_run, [''])
test('encoding003', normal, compile_and_run, [''])
-test('encoding004', extra_files(['encoded-data/']), compile_and_run, [''])
+test('encoding004', [extra_files(['encoded-data/']), js_broken(22374)], compile_and_run, [''])
test('encoding005', normal, compile_and_run, [''])
test('environment001', [], makefile_test, ['environment001-test'])
diff --git a/libraries/base/tests/System/all.T b/libraries/base/tests/System/all.T
index 50ebb596e6..ad3b046b25 100644
--- a/libraries/base/tests/System/all.T
+++ b/libraries/base/tests/System/all.T
@@ -4,7 +4,7 @@ test('getArgs001', normal, compile_and_run, [''])
test('getEnv001', normal, compile_and_run, [''])
test('T5930', normal, compile_and_run, [''])
-test('system001', when(opsys("mingw32"), skip), \
+test('system001', [js_broken(22349), when(opsys("mingw32"), skip)], \
compile_and_run, [''])
-test('Timeout001', normal, compile_and_run, [''])
+test('Timeout001', js_broken(22261), compile_and_run, [''])
test('T16466', normal, compile_and_run, [''])
diff --git a/libraries/base/tests/all.T b/libraries/base/tests/all.T
index e50d28da12..c96a3d1f43 100644
--- a/libraries/base/tests/all.T
+++ b/libraries/base/tests/all.T
@@ -156,7 +156,7 @@ test('T2528', normal, compile_and_run, [''])
# May 2014: seems to work on msys2
# May 2018: The behavior of printf seems very implementation dependent.
# so let's normalise the output.
-test('T4006', normalise_fun(normalise_quotes), compile_and_run, [''])
+test('T4006', [js_broken(22349), normalise_fun(normalise_quotes)], compile_and_run, [''])
test('T5943', normal, compile_and_run, [''])
test('T5962', normal, compile_and_run, [''])
@@ -167,7 +167,7 @@ test('qsemn001', normal, compile_and_run, [''])
test('T7457', normal, compile_and_run, [''])
-test('T7773', when(opsys('mingw32'), skip), compile_and_run, [''])
+test('T7773', [when(opsys('mingw32'), skip), js_broken(22261)], compile_and_run, [''])
# Andreas says that T7773 will not (and should not) work on Windows
# Tests for kind-polymorphic Category
@@ -179,15 +179,17 @@ test('T7653', [when(opsys('mingw32'), skip),
omit_ways(prof_ways+['ghci'])], compile_and_run, [''])
test('T7787', normal, compile_and_run, [''])
-test('topHandler01', when(opsys('mingw32'), skip), compile_and_run, [''])
+test('topHandler01', [when(opsys('mingw32'), skip), js_broken(22261)], compile_and_run, [''])
test('topHandler02',
[when(opsys('mingw32'), skip),
omit_ways(['ghci']),
- signal_exit_code(2)
+ signal_exit_code(2),
+ js_broken(22261)
], compile_and_run, [''])
test('topHandler03',
[when(opsys('mingw32'), skip), ignore_stderr,
- signal_exit_code(15)
+ signal_exit_code(15),
+ js_broken(22261)
], compile_and_run, [''])
test('topHandler04',
[when(opsys('mingw32'), skip),
@@ -197,7 +199,9 @@ test('topHandler04',
test('T8766',
[ collect_stats('bytes allocated',5)
- , only_ways(['normal'])],
+ , only_ways(['normal'])
+ , js_broken(22261)
+ ],
compile_and_run,
['-O'])
@@ -221,31 +225,36 @@ test('T8089',
[exit_code(99), run_timeout_multiplier(0.01)],
compile_and_run, [''])
test('T8684', expect_broken(8684), compile_and_run, [''])
-test('hWaitForInput-accurate-stdin', [expect_broken_for(16535, threaded_ways), omit_ways(['ghci'])], compile_and_run, [''])
+test('hWaitForInput-accurate-stdin', [js_broken(22349), expect_broken_for(16535, threaded_ways), omit_ways(['ghci'])], compile_and_run, [''])
test('T9826',normal, compile_and_run,[''])
test('T9848',
[ collect_stats('bytes allocated')
- , only_ways(['normal'])],
+ , only_ways(['normal'])
+ , js_broken(22261)
+ ],
compile_and_run,
['-O'])
test('T10149', normal, compile_and_run, [''])
test('T11334a', normal, compile_and_run, [''])
test('T11555', normal, compile_and_run, [''])
test('T12494', normal, compile_and_run, [''])
-test('T12852', when(opsys('mingw32'), skip), compile_and_run, [''])
+test('T12852', [when(opsys('mingw32'), skip), js_broken(22374)], compile_and_run, [''])
test('lazySTexamples', normal, compile_and_run, [''])
test('T11760', req_smp, compile_and_run, ['-threaded -with-rtsopts=-N2'])
test('T12874', normal, compile_and_run, [''])
test('T13191',
[ collect_stats('bytes allocated', 5)
- , only_ways(['normal'])],
+ , only_ways(['normal'])
+ , js_broken(22261)
+ ],
compile_and_run,
['-O'])
-test('T13525', when(opsys('mingw32'), skip), compile_and_run, [''])
+test('T13525', [when(opsys('mingw32'), skip), js_broken(22374)], compile_and_run, [''])
test('T13097', normal, compile_and_run, [''])
test('functorOperators', normal, compile_and_run, [''])
test('T3474',
[collect_stats('max_bytes_used',5),
+ js_broken(22374),
only_ways(['normal'])],
compile_and_run, ['-O'])
test('T14425', normal, compile_and_run, [''])
@@ -254,25 +263,29 @@ test('T13896', normal, compile_and_run, [''])
# On Windows this test is fragile using the old MIO IO manager due to an
# apparent flushing bug.
test('T13167',
- [when(opsys('mingw32'), only_ways(['winio', 'winio_threaded'])),
- fragile_for(16536, concurrent_ways)],
+ [ when(opsys('mingw32')
+ , only_ways(['winio', 'winio_threaded']))
+ , fragile_for(16536, concurrent_ways)
+ , js_broken(22261)
+ ],
compile_and_run, [''])
test('T15183', normal, compile_and_run, [''])
test('T15349', [exit_code(1), expect_broken_for(15349, ['ghci'])], compile_and_run, [''])
test('T16111', exit_code(1), compile_and_run, [''])
test('T16943a', normal, compile_and_run, [''])
test('T16943b', normal, compile_and_run, [''])
-test('T17499', [collect_stats('bytes allocated',5)], compile_and_run, ['-O -w'])
+test('T17499', [collect_stats('bytes allocated',5), js_broken(22261)], compile_and_run, ['-O -w'])
test('T16643', normal, compile_and_run, [''])
test('clamp', normal, compile_and_run, [''])
test('T18642',
[extra_run_opts('+RTS -T -RTS'),
# The nonmoving GC's residency behavior is very conservative
- omit_ways(['nonmoving', 'nonmoving_thr', 'nonmoving_thr_sanity'])],
+ omit_ways(['nonmoving', 'nonmoving_thr', 'nonmoving_thr_sanity']),
+ js_broken(22374)],
compile_and_run, ['-O2'])
test('T19288', exit_code(1), compile_and_run, [''])
test('T19719', normal, compile_and_run, [''])
test('T20107', extra_run_opts('+RTS -M50M'), compile_and_run, ['-package bytestring'])
test('trace', normal, compile_and_run, [''])
-test('listThreads', normal, compile_and_run, [''])
+test('listThreads', js_broken(22261), compile_and_run, [''])
test('inits1tails1', normal, compile_and_run, [''])
diff --git a/libraries/ghc-boot-th/GHC/ForeignSrcLang/Type.hs b/libraries/ghc-boot-th/GHC/ForeignSrcLang/Type.hs
index c40f6f91df..19b223f56d 100644
--- a/libraries/ghc-boot-th/GHC/ForeignSrcLang/Type.hs
+++ b/libraries/ghc-boot-th/GHC/ForeignSrcLang/Type.hs
@@ -13,5 +13,6 @@ data ForeignSrcLang
| LangObjc -- ^ Objective C
| LangObjcxx -- ^ Objective C++
| LangAsm -- ^ Assembly language (.s)
+ | LangJs -- ^ JavaScript
| RawObject -- ^ Object (.o)
deriving (Eq, Show, Generic)
diff --git a/libraries/ghc-boot/GHC/Data/ShortText.hs b/libraries/ghc-boot/GHC/Data/ShortText.hs
index 9ea261435f..aa5a50ce7f 100644
--- a/libraries/ghc-boot/GHC/Data/ShortText.hs
+++ b/libraries/ghc-boot/GHC/Data/ShortText.hs
@@ -29,6 +29,7 @@ module GHC.Data.ShortText (
-- * ShortText
ShortText(..),
-- ** Conversion to and from String
+ singleton,
pack,
unpack,
-- ** Operations
@@ -77,6 +78,10 @@ byteLength st = SBS.length $ contents st
pack :: String -> ShortText
pack s = ShortText $ utf8EncodeShortByteString s
+-- | Create a singleton
+singleton :: Char -> ShortText
+singleton s = pack [s]
+
-- | /O(n)/ Convert a 'ShortText' into a 'String'.
unpack :: ShortText -> String
unpack st = utf8DecodeShortByteString $ contents st
diff --git a/libraries/ghc-compact/tests/all.T b/libraries/ghc-compact/tests/all.T
index 92864e37bb..a9e72b548f 100644
--- a/libraries/ghc-compact/tests/all.T
+++ b/libraries/ghc-compact/tests/all.T
@@ -1,4 +1,7 @@
-setTestOpts(extra_ways(['sanity', 'compacting_gc']))
+setTestOpts(
+ [extra_ways(['sanity', 'compacting_gc']),
+ js_skip # compact API not supported by the JS backend
+ ])
test('compact_simple', normal, compile_and_run, [''])
test('compact_loop', normal, compile_and_run, [''])
diff --git a/libraries/ghc-heap/ghc-heap.cabal.in b/libraries/ghc-heap/ghc-heap.cabal.in
index d1db0e250c..1842995885 100644
--- a/libraries/ghc-heap/ghc-heap.cabal.in
+++ b/libraries/ghc-heap/ghc-heap.cabal.in
@@ -28,7 +28,8 @@ library
, containers >= 0.6.2.1 && < 0.7
ghc-options: -Wall
- cmm-sources: cbits/HeapPrim.cmm
+ if !os(ghcjs)
+ cmm-sources: cbits/HeapPrim.cmm
default-extensions: NoImplicitPrelude
diff --git a/libraries/ghc-heap/tests/all.T b/libraries/ghc-heap/tests/all.T
index 504eb58857..bce11d6278 100644
--- a/libraries/ghc-heap/tests/all.T
+++ b/libraries/ghc-heap/tests/all.T
@@ -1,3 +1,5 @@
+setTestOpts(js_skip) # ghc-heap not supported by the JS backend
+
test('heap_all',
[when(have_profiling(), extra_ways(['prof'])),
# These ways produce slightly different heap representations.
diff --git a/libraries/ghc-prim/ghc-prim.cabal b/libraries/ghc-prim/ghc-prim.cabal
index 24b412e970..dbe1e32545 100644
--- a/libraries/ghc-prim/ghc-prim.cabal
+++ b/libraries/ghc-prim/ghc-prim.cabal
@@ -81,19 +81,20 @@ Library
-- is just an empty shell.
extra-libraries: c, m
- c-sources:
- cbits/atomic.c
- cbits/bswap.c
- cbits/bitrev.c
- cbits/clz.c
- cbits/ctz.c
- cbits/debug.c
- cbits/longlong.c
- cbits/mulIntMayOflo.c
- cbits/pdep.c
- cbits/pext.c
- cbits/popcnt.c
- cbits/word2float.c
+ if !os(ghcjs)
+ c-sources:
+ cbits/atomic.c
+ cbits/bswap.c
+ cbits/bitrev.c
+ cbits/clz.c
+ cbits/ctz.c
+ cbits/debug.c
+ cbits/longlong.c
+ cbits/mulIntMayOflo.c
+ cbits/pdep.c
+ cbits/pext.c
+ cbits/popcnt.c
+ cbits/word2float.c
-- We need to set the unit ID to ghc-prim (without a version number)
-- as it's magic.
diff --git a/libraries/ghci/GHCi/CreateBCO.hs b/libraries/ghci/GHCi/CreateBCO.hs
index 7d969efc8d..72364b6a7e 100644
--- a/libraries/ghci/GHCi/CreateBCO.hs
+++ b/libraries/ghci/GHCi/CreateBCO.hs
@@ -5,6 +5,7 @@
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE CPP #-}
--
-- (c) The University of Glasgow 2002-2006
@@ -132,7 +133,12 @@ writePtrsArrayPtr (I# i) (Ptr a#) (PtrsArr arr) = IO $ \s ->
-- without making a thunk turns out to be surprisingly tricky.
{-# NOINLINE writeArrayAddr# #-}
writeArrayAddr# :: MutableArray# s a -> Int# -> Addr# -> State# s -> State# s
+#if defined(js_HOST_ARCH)
+-- Addr# isn't coercible with Any with the JS backend.
+writeArrayAddr# = error "writeArrayAddr#: currently unsupported with the JS backend"
+#else
writeArrayAddr# marr i addr s = unsafeCoerce# writeArray# marr i addr s
+#endif
writePtrsArrayBCO :: Int -> BCO -> PtrsArr -> IO ()
writePtrsArrayBCO (I# i) bco (PtrsArr arr) = IO $ \s ->
diff --git a/libraries/ghci/GHCi/FFI.hsc b/libraries/ghci/GHCi/FFI.hsc
index 74c9e175b1..ab6c4bb17f 100644
--- a/libraries/ghci/GHCi/FFI.hsc
+++ b/libraries/ghci/GHCi/FFI.hsc
@@ -6,7 +6,24 @@
--
-----------------------------------------------------------------------------
+{- Note [FFI for the JS-Backend]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ The JS-backend does not use GHC's native rts, as such you might think that it
+ doesn't require ghci. However, that is not true, because we need ghci in
+ order to interoperate with iserv even if we do not use any of the FFI stuff
+ in this file. So obviously we do not require libffi, but we still need to be
+ able to build ghci in order for the JS-Backend to supply its own iserv
+ interop solution. Thus we bite the bullet and wrap all the unneeded bits in a
+ CPP conditional compilation blocks that detect the JS-backend. A necessary
+ evil to be sure; notice that the only symbols remaining the JS_HOST_ARCH case
+ are those that are explicitly exported by this module and set to error if
+ they are every used.
+-}
+
+#if !defined(js_HOST_ARCH)
#include <ffi.h>
+#endif
{-# LANGUAGE CPP, DeriveGeneric, DeriveAnyClass #-}
module GHCi.FFI
@@ -18,11 +35,13 @@ module GHCi.FFI
) where
import Prelude -- See note [Why do we import Prelude here?]
+#if !defined(js_HOST_ARCH)
import Control.Exception
+import Foreign.C
+#endif
import Data.Binary
import GHC.Generics
import Foreign
-import Foreign.C
data FFIType
= FFIVoid
@@ -51,6 +70,7 @@ prepForeignCall
-> FFIType -- result type
-> IO (Ptr C_ffi_cif) -- token for making calls (must be freed by caller)
+#if !defined(js_HOST_ARCH)
prepForeignCall cconv arg_types result_type = do
let n_args = length arg_types
arg_arr <- mallocArray n_args
@@ -66,11 +86,26 @@ prepForeignCall cconv arg_types result_type = do
" res ty: ", show result_type, ")" ]
else
return (castPtr cif)
+#else
+prepForeignCall _ _ _ =
+ error "GHCi.FFI.prepForeignCall: Called with JS_HOST_ARCH! Perhaps you need to run configure?"
+#endif
+
freeForeignCallInfo :: Ptr C_ffi_cif -> IO ()
+#if !defined(js_HOST_ARCH)
freeForeignCallInfo p = do
free ((#ptr ffi_cif, arg_types) p)
free p
+#else
+freeForeignCallInfo _ =
+ error "GHCi.FFI.freeForeignCallInfo: Called with JS_HOST_ARCH! Perhaps you need to run configure?"
+#endif
+
+data C_ffi_cif
+
+#if !defined(js_HOST_ARCH)
+data C_ffi_type
strError :: C_ffi_status -> String
strError r
@@ -103,9 +138,6 @@ ffiType FFIUInt16 = ffi_type_uint16
ffiType FFIUInt32 = ffi_type_uint32
ffiType FFIUInt64 = ffi_type_uint64
-data C_ffi_type
-data C_ffi_cif
-
type C_ffi_status = (#type ffi_status)
type C_ffi_abi = (#type ffi_abi)
@@ -161,3 +193,4 @@ foreign import ccall "ffi_prep_cif"
-- -> Ptr () -- put result here
-- -> Ptr (Ptr ()) -- arg values
-- -> IO ()
+#endif
diff --git a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs
index 37de9717b0..aae6ecdbb1 100644
--- a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs
+++ b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs
@@ -827,6 +827,7 @@ addForeignSource lang src = do
LangObjc -> "m"
LangObjcxx -> "mm"
LangAsm -> "s"
+ LangJs -> "js"
RawObject -> "a"
path <- addTempFile suffix
runIO $ writeFile path src