diff --git a/Language/Javascript/JMacro/QQ.hs b/Language/Javascript/JMacro/QQ.hs
--- a/Language/Javascript/JMacro/QQ.hs
+++ b/Language/Javascript/JMacro/QQ.hs
@@ -15,6 +15,7 @@
 module Language.Javascript.JMacro.QQ(jmacro,jmacroE) where
 import Prelude hiding (tail, init, head, last, minimum, maximum, foldr1, foldl1, (!!), read)
 import Control.Applicative hiding ((<|>),many,optional,(<*))
+import Control.Arrow((&&&))
 import Control.Monad.State.Strict
 import qualified Data.ByteString.Char8 as BS
 import Data.Char(digitToInt, toLower)
@@ -31,16 +32,17 @@
 import Text.ParserCombinators.Parsec
 import Text.ParserCombinators.Parsec.Expr
 import Text.ParserCombinators.Parsec.Error
+import Text.ParserCombinators.Parsec.Pos
 import qualified Text.ParserCombinators.Parsec.Token as P
 import Text.ParserCombinators.Parsec.Language(javaStyle)
 
--- import Text.Regex.PCRE.Light (compileM)
+import Text.Regex.PCRE.Light (compileM)
 
 import Language.Javascript.JMacro.Base
 
 -- import Debug.Trace
 
-compileM _ _ = Right "hack"
+--compileM _ _ = Right "hack"
 
 {--------------------------------------------------------------------
   QuasiQuotation
@@ -60,13 +62,11 @@
                Left err -> fail (show err)
 
 quoteJMExp :: String -> TH.ExpQ
-quoteJMExp s = case parseJM s of
+quoteJMExp s = do
+    (f,p) <- (TH.loc_filename &&& TH.loc_start) <$> TH.location
+    case parseJMPos s f p of
                Right x -> jm2th x
-               Left err -> do
-                   (line,_) <- TH.loc_start <$> TH.location
-                   let pos = errorPos err
-                   let newPos = setSourceLine pos $ line + sourceLine pos - 1
-                   fail (show $ setErrorPos newPos err)
+               Left err -> fail (show err)
 
 quoteJMPatE :: String -> TH.PatQ
 quoteJMPatE s = case parseJME s of
@@ -74,14 +74,11 @@
                Left err -> fail (show err)
 
 quoteJMExpE :: String -> TH.ExpQ
-quoteJMExpE s = case parseJME s of
+quoteJMExpE s = do
+    (f,p) <- (TH.loc_filename &&& TH.loc_start) <$> TH.location
+    case parseJMEPos s f p of
                Right x -> jm2th x
-               Left err -> do
-                   (line,_) <- TH.loc_start <$> TH.location
-                   let pos = errorPos err
-                   let newPos = setSourceLine pos $ line + sourceLine pos - 1
-                   fail (show $ setErrorPos newPos err)
-
+               Left err -> fail (show err)
 
 -- | Traverse a syntax tree, replace an identifier by an
 -- antiquotation of a free variable.
@@ -175,6 +172,7 @@
 
 lexer = P.makeTokenParser jsLang
 
+
 jsLang :: P.LanguageDef ()
 jsLang = javaStyle {
            P.reservedNames = ["var","return","if","else","while","for","in","break","new","function","switch","case","default","fun"],
@@ -210,6 +208,14 @@
   y
   return xr
 
+parseJMPos :: String -> String -> (Int, Int) -> Either ParseError JStat
+parseJMPos s f (p1,p2) = BlockStat <$> runParser jmacroParser () "" s
+    where jmacroParser = do
+            setPosition $ newPos f p1 p2
+            ans <- statblock
+            eof
+            return ans
+
 parseJM :: String -> Either ParseError JStat
 parseJM s = BlockStat <$> runParser jmacroParser () "" s
     where jmacroParser = do
@@ -220,6 +226,14 @@
 parseJME :: String -> Either ParseError JExpr
 parseJME s = runParser jmacroParserE () "" s
     where jmacroParserE = do
+            ans <- whiteSpace >> expr
+            eof
+            return ans
+
+parseJMEPos :: String -> String -> (Int, Int) -> Either ParseError JExpr
+parseJMEPos s f (p1,p2) = runParser jmacroParserE () "" s
+    where jmacroParserE = do
+            setPosition $ newPos f p1 p2
             ans <- whiteSpace >> expr
             eof
             return ans
diff --git a/Language/Javascript/JMacro/Typed.hs b/Language/Javascript/JMacro/Typed.hs
--- a/Language/Javascript/JMacro/Typed.hs
+++ b/Language/Javascript/JMacro/Typed.hs
@@ -20,6 +20,9 @@
 import Debug.Trace
 
 
+--Type Parser
+--primitives for arrays, strings
+
 --todo: collect errors
 --pretty types, bump down variable nums
 --infer missing vs. assert missing
@@ -538,7 +541,11 @@
         else return ()
     case xr of
       (JTSat _) -> xr <: y
-      _ -> xr =.= y
+      _ -> do
+        yr <- resolveType y
+        case yr of
+          (JTSat _) -> yr <: xr
+          _ -> xr =.= yr
 
 (=.=) :: JType -> JType -> JMonad ()
 x =.= y = do
@@ -1170,9 +1177,12 @@
         _ -> tyErr1 "Attempt to use 'for each in' construct with improper type" et
       inConditional $ typecheck s
     typecheck (ApplStat e args) = typecheck (ApplExpr e args) >> return JTStat
+    typecheck (PostStat s e) = typecheck (PostExpr s e) >> return JTStat
     typecheck BreakStat = return JTStat
     --Switch
     --Unsat $ Anti -- anti can take signature!?
+
+---add special cases in selectors for lists, etc!
 
 typecheckLhs :: JExpr -> JMonad JType
 typecheckLhs (SelExpr e1 ident@(StrI s)) = do
diff --git a/jmacro.cabal b/jmacro.cabal
--- a/jmacro.cabal
+++ b/jmacro.cabal
@@ -1,5 +1,5 @@
 name:                jmacro
-version:             0.1
+version:             0.1.1
 synopsis:            QuasiQuotation library for programmatic generation of Javascript code.
 description:         Javascript syntax, functional syntax, hygeinic names, compile-time guarantees of syntactic correctness, limited typechecking.
 category:            Language
