From 455efc1ffbf71e9e05a1d64db584fdd7378fd0dc Mon Sep 17 00:00:00 2001 From: dmjio Date: Fri, 27 Jun 2025 00:09:55 -0500 Subject: [PATCH] Upstream FromJSVal, ToJSVal, MakeArgs instances on primitive types This patch adds some basic instances to avoid orphans in downstream projects. --- jsaddle/src-ghc/GHCJS/Marshal/Internal.hs | 9 +++++++++ .../Language/Javascript/JSaddle/Classes/Internal.hs | 13 ++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/jsaddle/src-ghc/GHCJS/Marshal/Internal.hs b/jsaddle/src-ghc/GHCJS/Marshal/Internal.hs index 9ed2e310..4c4ccbf8 100644 --- a/jsaddle/src-ghc/GHCJS/Marshal/Internal.hs +++ b/jsaddle/src-ghc/GHCJS/Marshal/Internal.hs @@ -61,6 +61,9 @@ class ToJSVal a where default toJSVal :: (Generic a, GToJSVal (Rep a ())) => a -> JSM JSVal toJSVal = toJSVal_generic id +instance ToJSVal (SomeJSArray Immutable) where + toJSVal (SomeJSArray x) = pure x + fromJustWithStack :: JSadddleHasCallStack => Maybe a -> a fromJustWithStack Nothing = error "fromJSValUnchecked: fromJSVal result was Nothing" fromJustWithStack (Just x) = x @@ -68,6 +71,12 @@ fromJustWithStack (Just x) = x class FromJSVal a where fromJSVal :: JSVal -> JSM (Maybe a) +instance FromJSVal Function where + fromJSVal = pure . pure . Function . Object + +instance FromJSVal Object where + fromJSVal = pure . pure . Object + #if MIN_VERSION_base(4,9,0) && defined(JSADDLE_HAS_CALL_STACK) fromJSValUnchecked :: JSadddleHasCallStack => JSVal -> JSM a #ifdef CHECK_UNCHECKED diff --git a/jsaddle/src/Language/Javascript/JSaddle/Classes/Internal.hs b/jsaddle/src/Language/Javascript/JSaddle/Classes/Internal.hs index c60d1c01..76fcbdcb 100644 --- a/jsaddle/src/Language/Javascript/JSaddle/Classes/Internal.hs +++ b/jsaddle/src/Language/Javascript/JSaddle/Classes/Internal.hs @@ -21,7 +21,7 @@ module Language.Javascript.JSaddle.Classes.Internal ( ) where import Language.Javascript.JSaddle.Types - (JSM, Object(..), JSVal) + (JSM, Object(..), JSVal, JSString(..), Function(..), Object(..)) -- | Anything that can be used to make a JavaScript object reference class MakeObject this where @@ -39,3 +39,14 @@ class MakeArgs this where instance MakeArgs arg => MakeArgs (JSM arg) where makeArgs arg = arg >>= makeArgs +instance MakeArgs Int where + makeArgs arg = (:[]) <$> toJSVal arg + +instance MakeArgs Object where + makeArgs (Object arg) = pure [arg] + +instance MakeArgs JSString where + makeArgs (JSString arg) = makeArgs arg + +instance MakeArgs Function where + makeArgs (Function (Object arg)) = pure [arg]