packages feed

ecma262-0.0.0: src/Language/JavaScript.hs

module Language.JavaScript
       where

import Control.Applicative ((<$>))

import Text.Parsec (ParseError)

import Language.JavaScript.Interpret
import Language.JavaScript.Parser

runJavaScript :: (Functor m, Monad m) =>
                 String -> m (Either ParseError (Either Value Completion))
runJavaScript source = do
  let eAST = parseJavaScript source
  case eAST of
   Right ast -> do
     Right <$> runJavaScriptT initialState (interpret ast)
   Left e -> return (Left e)

runHostedJavaScript :: (Functor m, Monad m) =>
                       String ->
                       JavaScriptT m () ->
                       m (Either ParseError (Either Value Completion))
runHostedJavaScript source hostInit = do
  let eAST = parseJavaScript source
  case eAST of
   Right ast -> do
     Right <$> runJavaScriptT initialState (hostInit >> interpret ast)
   Left e -> return (Left e)