----------------------------------------------------------------------------- {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE CPP #-} ----------------------------------------------------------------------------- -- | -- Module : Miso.Lynx -- Copyright : (C) 2016-2025 David M. Johnson -- License : BSD3-style (see the file LICENSE) -- Maintainer : David M. Johnson <code@dmj.io> -- Stability : experimental -- Portability : non-portable -- -- Example usage: -- -- @ -- import Miso -- import Miso.Lynx -- -- view :: Model -> View Model Action -- view m = -- view_ -- [] -- [ view_ [ onTap Increment ] [ text_ [] [ "+" ] ] -- , text_ [] [ text $ ms (show m) ] -- , view_ [ onTap Decrement ] [ text_ [] [ "-" ] ] -- ] -- @ -- -- More information on how to use miso is available on GitHub -- -- <http://github.com/dmjio/miso-lynx> -- ---------------------------------------------------------------------------- module Miso.Lynx ( -- * Entrypoint lynx -- * Element , module Miso.Lynx.Element -- * FFI , module Miso.Lynx.FFI -- * Event , module Miso.Lynx.Event ) where ----------------------------------------------------------------------------- import Miso (renderApp, App, Events) import Miso.Lynx.Element import Miso.Lynx.FFI import Miso.Lynx.Event ----------------------------------------------------------------------------- import Control.Monad (void) ----------------------------------------------------------------------------- lynx :: Eq model => Events -> App model action -> IO () lynx :: forall model action. Eq model => Events -> App model action -> IO () lynx Events events App model action vcomp = IO () -> IO () forall a. IO a -> IO () withJS (Events -> MisoString -> App model action -> IO () forall model action. Eq model => Events -> MisoString -> App model action -> IO () renderApp Events events MisoString "native" App model action vcomp) ----------------------------------------------------------------------------- -- | Used when compiling with jsaddle to make miso's JavaScript present in -- the execution context. withJS :: IO a -> IO () withJS :: forall a. IO a -> IO () withJS IO a action = IO a -> IO () forall (f :: * -> *) a. Functor f => f a -> f () void (IO a -> IO ()) -> IO a -> IO () forall a b. (a -> b) -> a -> b $ do #ifdef WASM $(evalFile "js/miso-lynx.js") #endif action -----------------------------------------------------------------------------