content: {-# LANGUAGE CPP #-}
  
  #ifdef __GHCJS__
  {-# LANGUAGE JavaScriptFFI #-}
  #else
  {-# LANGUAGE RankNTypes, TypeSynonymInstances, FlexibleInstances #-}
  {-# OPTIONS_GHC -fno-warn-missing-methods #-}
  #endif
  
  module React.Imports
      ( RawEvent
      , ImportedClass
  
      -- * Foreign imports
      , js_render
      , js_createClass
      , js_react_createElement_DOM
      , js_react_createElement_Class
      , js_set_handler
      , js_forceUpdate
      , js_foreignParent
      ) where
  
  import React.GHCJS
  
  data RawEvent_
  type RawEvent = JSRef RawEvent_
  
  data ImportedClass_ props sig
  type ImportedClass props sig = JSRef (ImportedClass_ props sig)
  
  #ifdef __GHCJS__
  
  foreign import javascript unsafe "React.render($1, $2)"
      js_render :: JSRef () -> Element -> IO ()
  foreign import javascript unsafe "js_createClass"
      js_createClass :: JSAny -> JSAny
  foreign import javascript unsafe "React.createElement.apply(null, [$1, $2].concat($3))"
      js_react_createElement_DOM :: JSString -> JSAny -> JSAny -> IO JSAny
  foreign import javascript unsafe "React.createElement.apply(null, [$1, $2].concat($3))"
  -- foreign import javascript unsafe "function(x, y, z) { console.log(x, y, z, [x,y].concat(z)); return React.createElement.apply(null, [x, y].concat(z)); }($1, $2, $3)"
      js_react_createElement_Class :: JSAny -> JSAny -> JSAny -> IO JSAny
  foreign import javascript unsafe "js_set_handler"
      js_set_handler :: Int -> JSString -> (JSFun (RawEvent -> IO ())) -> JSAny -> IO ()
  foreign import javascript unsafe "$1.forceUpdate()"
      js_forceUpdate :: JSAny -> IO ()
  foreign import javascript unsafe "React.createElement($1, $2, $3)"
      js_foreignParent :: ImportedClass props sig -> JSRef props -> JSAny -> IO JSAny
  
  #else
  
  -- mock the foreign imports
  
  js_render :: JSRef () -> Element -> IO ()
  js_render = error "cannot evaluate js_render in ghc"
  
  js_createClass :: JSAny -> JSAny
  js_createClass = error "cannot evaluate js_createClass in ghc"
  
  js_react_createElement_DOM :: JSString -> JSAny -> JSAny -> IO JSAny
  js_react_createElement_DOM = error "cannot evaluate js_react_createElement_DOM in ghc"
  
  js_react_createElement_Class :: JSAny -> JSAny -> JSAny -> IO JSAny
  js_react_createElement_Class = error "cannot evaluate js_react_createElement_Class in ghc"
  
  js_set_handler :: Int -> JSString -> JSFun (RawEvent -> IO ()) -> JSAny -> IO ()
  js_set_handler = error "cannot evaluate js_set_handler in ghc"
  
  js_forceUpdate :: JSAny -> IO ()
  js_forceUpdate = error "cannot evaluate js_forceUpdate in ghc"
  
  js_foreignParent :: ImportedClass props sig -> JSRef props -> JSAny -> IO JSAny
  js_foreignParent = error "cannot evaluate js_foreignParent in ghc"
  
  #endif
  