{-# LANGUAGE ForeignFunctionInterface, EmptyDataDecls, OverloadedStrings #-} -- | Haste's companion to the Prelude. -- -- Note that this module should *not* be imported together with -- "Haste.App", which provides the same functionality but slightly modified -- for automatic program slicing. module Haste ( -- * Basic utility functions JSString, JSAny, URL, alert, prompt, eval, writeLog, catJSStr, fromJSStr, -- * URL hash handling onHashChange, onHashChange', setHash, getHash, setHash', getHash', -- * Random number generation (deprecated; use the @random@ package instead) Random (..), Seed, next, mkSeed, newSeed, -- * Timers Timer, Interval (..), setTimer, stopTimer, -- * Fast conversions for JS-native types JSType (..), JSNum (..), toString, fromString, convert ) where import Haste.Prim import Haste.Timer import Haste.Random import Haste.Prim.JSType import Haste.Hash import Haste.Foreign import Control.Monad.IO.Class jsAlert :: String -> IO () jsAlert = ffi "alert" jsLog :: String -> IO () jsLog = ffi "(function(x){console.log(x);})" jsPrompt :: String -> IO String jsPrompt = ffi "(function(s){var x = prompt(s);\ \return (x === null) ? '' : x.toString();})" jsEval :: JSString -> IO JSString jsEval = ffi "(function(s){var x = eval(s);\ \return (typeof x === 'undefined') ? 'undefined' : x.toString();})" -- | Javascript alert() function. alert :: MonadIO m => String -> m () alert = liftIO . jsAlert -- | Javascript prompt() function. prompt :: MonadIO m => String -> m String prompt = liftIO . jsPrompt -- | Javascript eval() function. eval :: MonadIO m => JSString -> m JSString eval = liftIO . jsEval -- | Use console.log to write a message. writeLog :: MonadIO m => String -> m () writeLog = liftIO . jsLog