Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
06ad18a
Drop `jsaddle`, `JSM`, stub out FFI in `Miso.DSL`
dmjio Dec 22, 2025
8fcb205
Add FFI modules, more stubs, JSVal CPP.
dmjio Dec 22, 2025
b02816a
Add more WASM FFI, `Data.JSString` for WASM.
dmjio Dec 28, 2025
bd8c8cb
Refactor mount() to use synchronous callbacks.
dmjio Dec 28, 2025
010373c
Flesh out more of the js FFI.
dmjio Dec 28, 2025
cceebc1
Additional JSString conversions
dmjio Dec 29, 2025
76be5da
Add more string functions
dmjio Dec 29, 2025
13e997a
Finish WASM string impl.
dmjio Dec 29, 2025
15344e9
Update `map`
dmjio Dec 29, 2025
9c0d7e2
Regen JS
dmjio Dec 29, 2025
2b72297
Update WASM FFI and Miso.DSL
dmjio Dec 29, 2025
1721d8d
lint
dmjio Dec 29, 2025
e3ce349
Drop ImportQualifiedPost
dmjio Dec 29, 2025
b6bc5f3
Add jsgf, jsg1
dmjio Dec 30, 2025
1e930e1
Fixed Ord MisoString
dmjio Dec 30, 2025
08fb29a
Add `FromJSVal_Value`
dmjio Dec 30, 2025
ab5aa7b
Make `foreign import` `unsafe`
dmjio Dec 30, 2025
72b3383
`toJSVal_Value`
dmjio Dec 30, 2025
d7e5848
Export `evalFile` for WASM backend.
dmjio Dec 30, 2025
9ad9fd4
Update Miso.String module, flesh out ghc ffi.
dmjio Dec 30, 2025
ca36b4c
Add JS backends.
dmjio Dec 30, 2025
60f01bb
Adjust `maximum` / `minimum` string definitions.
dmjio Dec 30, 2025
3252f17
Restore WASM settings and tests.
dmjio Dec 30, 2025
d3b4761
Remove error
dmjio Dec 30, 2025
9b0ef37
toRealFloat
dmjio Dec 30, 2025
8961e59
`async` -> `sync`
dmjio Dec 30, 2025
5edf18a
Use `Reflect.construct`
dmjio Dec 30, 2025
45351cc
Additional marshaling tests
dmjio Dec 31, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .ghci
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
:set prompt ">>> "
:set prompt2 "... "
:set -XOverloadedStrings
:set -isrc
:set -Wall
:set -finteractive
6 changes: 6 additions & 0 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ index-state: 2025-06-27T20:43:14Z
allow-newer:
all:base

with-hc-pkg:
wasm32-wasi-ghc-pkg

with-compiler:
wasm32-wasi-ghc

if arch(wasm32)
-- Required for TemplateHaskell. When using wasm32-wasi-cabal from
-- ghc-wasm-meta, this is superseded by the global cabal.config.
Expand Down
140 changes: 140 additions & 0 deletions ffi/ghc/Miso/DSL/FFI.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
-----------------------------------------------------------------------------
module Miso.DSL.FFI where
-----------------------------------------------------------------------------
import Data.Text (Text)
import Data.Aeson
-----------------------------------------------------------------------------
data JSVal = JSVal
-----------------------------------------------------------------------------
toJSVal_Bool :: Bool -> IO JSVal
toJSVal_Bool = undefined
-----------------------------------------------------------------------------
toJSVal_Double :: Double -> IO JSVal
toJSVal_Double = undefined
-----------------------------------------------------------------------------
toJSVal_Int :: Int -> IO JSVal
toJSVal_Int = undefined
-----------------------------------------------------------------------------
toJSVal_List :: [JSVal] -> IO JSVal
toJSVal_List = undefined
-----------------------------------------------------------------------------
toJSVal_isUndefined :: JSVal -> IO Bool
toJSVal_isUndefined = undefined
-----------------------------------------------------------------------------
toJSVal_isNull :: JSVal -> IO Bool
toJSVal_isNull = undefined
-----------------------------------------------------------------------------
jsNull :: JSVal
jsNull = JSVal
-----------------------------------------------------------------------------
toJSVal_Value :: Value -> IO JSVal
toJSVal_Value = undefined
-----------------------------------------------------------------------------
fromJSVal_Bool :: JSVal -> IO (Maybe Bool)
fromJSVal_Bool = undefined
-----------------------------------------------------------------------------
fromJSVal_Value :: JSVal -> IO (Maybe Value)
fromJSVal_Value = undefined
-----------------------------------------------------------------------------
new_ffi :: JSVal -> JSVal -> IO JSVal
new_ffi = undefined
-----------------------------------------------------------------------------
eval_ffi :: Text -> IO JSVal
eval_ffi = undefined
-----------------------------------------------------------------------------
create_ffi :: IO JSVal
create_ffi = undefined
-----------------------------------------------------------------------------
getProp_ffi :: Text -> JSVal -> IO JSVal
getProp_ffi = undefined
-----------------------------------------------------------------------------
setProp_ffi :: Text -> JSVal -> JSVal -> IO ()
setProp_ffi = undefined
-----------------------------------------------------------------------------
setField_ffi :: JSVal -> Text -> JSVal -> IO ()
setField_ffi = undefined
-----------------------------------------------------------------------------
fromJSVal_Int :: JSVal -> IO (Maybe Int)
fromJSVal_Int = undefined
-----------------------------------------------------------------------------
fromJSVal_Double :: JSVal -> IO (Maybe Double)
fromJSVal_Double = undefined
-----------------------------------------------------------------------------
getPropIndex_ffi :: Int -> JSVal -> IO JSVal
getPropIndex_ffi = undefined
-----------------------------------------------------------------------------
isNull_ffi :: JSVal -> Bool
isNull_ffi = undefined
-----------------------------------------------------------------------------
isUndefined_ffi :: JSVal -> Bool
isUndefined_ffi = undefined
-----------------------------------------------------------------------------
freeFunction_ffi :: JSVal -> IO ()
freeFunction_ffi = undefined
-----------------------------------------------------------------------------
waitForAnimationFrame_ffi :: IO Double
waitForAnimationFrame_ffi = undefined
-----------------------------------------------------------------------------
toJSVal_JSString :: Text -> IO JSVal
toJSVal_JSString = undefined
-----------------------------------------------------------------------------
fromJSValUnchecked_Maybe :: JSVal -> IO (Maybe JSVal)
fromJSValUnchecked_Maybe = undefined
-----------------------------------------------------------------------------
fromJSVal_Maybe :: JSVal -> IO (Maybe (Maybe JSVal))
fromJSVal_Maybe = undefined
-----------------------------------------------------------------------------
fromJSValUnchecked_Bool :: JSVal -> IO Bool
fromJSValUnchecked_Bool = undefined
-----------------------------------------------------------------------------
invokeFunction :: JSVal -> JSVal -> JSVal -> IO JSVal
invokeFunction = undefined
-----------------------------------------------------------------------------
listProps_ffi :: JSVal -> IO JSVal
listProps_ffi = undefined
-----------------------------------------------------------------------------
setPropIndex_ffi :: Int -> JSVal -> JSVal -> IO ()
setPropIndex_ffi = undefined
-----------------------------------------------------------------------------
global :: JSVal
global = undefined
-----------------------------------------------------------------------------
fromJSVal_List :: JSVal -> IO (Maybe [JSVal])
fromJSVal_List = undefined
-----------------------------------------------------------------------------
fromJSValUnchecked_Int :: JSVal -> IO Int
fromJSValUnchecked_Int = undefined
-----------------------------------------------------------------------------
fromJSValUnchecked_Double :: JSVal -> IO Double
fromJSValUnchecked_Double = undefined
-----------------------------------------------------------------------------
fromJSVal_JSString :: JSVal -> IO (Maybe Text)
fromJSVal_JSString = undefined
-----------------------------------------------------------------------------
asyncCallback :: IO () -> IO JSVal
asyncCallback = undefined
asyncCallback1 :: (JSVal -> IO ()) -> IO JSVal
asyncCallback1 = undefined
asyncCallback2 :: (JSVal -> JSVal -> IO ()) -> IO JSVal
asyncCallback2 = undefined
asyncCallback3 :: (JSVal -> JSVal -> JSVal -> IO ()) -> IO JSVal
asyncCallback3 = undefined
-----------------------------------------------------------------------------
syncCallback :: IO () -> IO JSVal
syncCallback = undefined
syncCallback1 :: (JSVal -> IO ()) -> IO JSVal
syncCallback1 = undefined
syncCallback2 :: (JSVal -> JSVal -> IO ()) -> IO JSVal
syncCallback2 = undefined
syncCallback3 :: (JSVal -> JSVal -> JSVal -> IO ()) -> IO JSVal
syncCallback3 = undefined
-----------------------------------------------------------------------------
syncCallback' :: IO JSVal -> IO JSVal
syncCallback' = undefined
syncCallback1' :: (JSVal -> IO JSVal) -> IO JSVal
syncCallback1' = undefined
syncCallback2' :: (JSVal -> JSVal -> IO JSVal) -> IO JSVal
syncCallback2' = undefined
syncCallback3' :: (JSVal -> JSVal -> JSVal -> IO JSVal) -> IO JSVal
syncCallback3' = undefined
-----------------------------------------------------------------------------
Loading
Loading