jsaddle-0.3.0.0: src/Language/Javascript/JSaddle/Classes.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeSynonymInstances #-}
-----------------------------------------------------------------------------
--
-- Module : Language.Javascript.JSaddle.Classes
-- Copyright : (c) Hamish Mackenzie
-- License : MIT
--
-- Maintainer : Hamish Mackenzie <Hamish.K.Mackenzie@googlemail.com>
--
-- | These classes are used to make various JavaScript types
-- out of whatever we have. Functions in jsaddle take these as inputs.
-- This alows implicit casting and eager evaluation.
--
-----------------------------------------------------------------------------
module Language.Javascript.JSaddle.Classes (
-- * Type classes to convert Haskell data to JavaScript
ToJSVal(..)
, ToJSString(..)
, MakeObject(..)
) where
import Language.Javascript.JSaddle.Types
(JSM, Object(..), JSString, JSVal)
-- | Anything that can be used to make a JavaScript value reference
class ToJSVal a where
toJSVal :: a -> JSM JSVal
-- | Anything that can be used to make a JavaScript string reference
class ToJSVal a => ToJSString a where
toJSString :: a -> JSString
-- | Anything that can be used to make a JavaScript object reference
class MakeObject this where
makeObject :: this -> JSM Object
instance ToJSVal Object where
toJSVal (Object r) = return r
{-# INLINE toJSVal #-}
-- | If we already have a Object we are fine
instance MakeObject Object where
makeObject = return
{-# INLINE makeObject #-}