{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE NoImplicitPrelude #-} -- | Module to be shared between server and client. -- -- This module must be valid for both GHC and Fay. module Language.Fay.Yesod where import Language.Fay.FFI import Language.Fay.Prelude -- | A proxy type for specifying what type a command should return. The final -- field for each data constructor in a command datatype should be @Returns@. data Returns a = Returns deriving (Show, Read, Data, Typeable) -- | Call a command. call :: (Foreign a, Foreign command) => (Returns a -> command) -> (a -> Fay ()) -> Fay () call f g = ajaxCommand (f Returns) g -- | Run the AJAX command. ajaxCommand :: (Foreign a, Foreign command) => command -> (a -> Fay ()) -> Fay () ajaxCommand = ffi "jQuery['ajax']({\ \ \"url\": window['yesodFayCommandPath'], \ \ \"type\": 'POST', \ \ \"data\": { \"json\": JSON.stringify(%1) }, \ \ \"dataType\": 'json', \ \ \"success\" : %2 \ \})"