{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TypeSynonymInstances #-} ----------------------------------------------------------------------------- -- -- Module : Language.Javascript.JSaddle.Classes -- Copyright : (c) Hamish Mackenzie -- License : MIT -- -- Maintainer : Hamish Mackenzie -- -- | 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 -- | If we already have a Object we are fine instance MakeObject Object where makeObject = return