@@ -28,7 +28,7 @@ indent = concatMap f
2828
2929internalImports =
3030 [ ("N" , "Elm.Native"),
31− ("_" , "N.Utils(elm)"),
31+ ("_N", "N.Utils(elm)"),
3232 ("_L", "N.List(elm)"),
3333 ("_E", "N.Error(elm)"),
3434 ("_str", "N.JavaScript(elm).toString")
@@ -53,7 +53,7 @@ globalAssign n e = "\n" ++ assign' n e ++ ";"
5353assign' n e = n ++ " = " ++ e
5454
5555jsModule (Module names exports imports stmts) =
56− setup ++ globalAssign ("Elm." ++ modName) (jsFunc "elm" program)
56+ setup ("Elm":modNames) ++ globalAssign ("Elm." ++ modName) (jsFunc "elm" program)
5757 where
5858 modNames = if null names then ["Main"] else names
5959 modName = intercalate "." modNames
@@ -61,12 +61,12 @@ jsModule (Module names exports imports stmts) =
6161 body = stmtsToJS stmts
6262 defs = assign "$op" "{}"
6363 program = "\nvar " ++ usefulFuncs ++ ";" ++ defs ++ includes ++ body ++
64− "\n_ = " ++ "elm.Native." ++ modName ++ " || {};" ++
65− getExports exports stmts ++
64+ setup ("elm":"Native":modNames) ++
65+ assign "_" ("elm.Native." ++ modName ++ " || {}") ++
66+ getExports exports stmts ++ setup ("elm":modNames) ++
6667 ret (assign' ("elm." ++ modName) "_") ++ "\n"
67− setup = concatMap (\n -> globalAssign n $ n ++ " || {}") .
68− map (intercalate ".") . tail . inits $
69− take (length modNames - 1) modNames
68+ setup modNames = concatMap (\n -> globalAssign n $ n ++ " || {}") .
69+ map (intercalate ".") . tail . inits $ init modNames
7070 usefulFuncs = intercalate ", " (map (uncurry assign') internalImports)
7171
7272getExports names stmts = "\n"++ intercalate ";\n" (op : map fnPair fns)
@@ -157,14 +157,7 @@ instance ToJS Statement where
157157 , "e.value = v;"
158158 , "document.dispatchEvent(e); return v; })(", elm, ");" ]
159159 TypeAnnotation _ _ -> return ""
160− TypeAlias n _ t ->
161− case t of
162− RecordT kvs _ -> return $ "\nfunction" ++ args ++ brackets body
163− where fs = Map.keys kvs
164− args = parens (intercalate "," fs)
165− body = ret . brackets . intercalate "," $
166− map (\k -> k ++ ":" ++ k) fs
167− _ -> return ""
160+ TypeAlias n _ t -> return ""
168161
169162toJS' :: CExpr -> GuidCounter String
170163toJS' (C txt span expr) =
@@ -173,9 +166,9 @@ toJS' (C txt span expr) =
173166 Case e cases -> caseToJS span e cases
174167 _ -> toJS expr
175168
176−remove x e = "_.remove('" ++ x ++ "', " ++ e ++ ")"
177−addField x v e = "_.insert('" ++ x ++ "', " ++ v ++ ", " ++ e ++ ")"
178−setField fs e = "_.replace(" ++ jsList (map f fs) ++ ", " ++ e ++ ")"
169+remove x e = "_N.remove('" ++ x ++ "', " ++ e ++ ")"
170+addField x v e = "_N.insert('" ++ x ++ "', " ++ v ++ ", " ++ e ++ ")"
171+setField fs e = "_N.replace(" ++ jsList (map f fs) ++ ", " ++ e ++ ")"
179172 where f (x,v) = "['" ++ x ++ "'," ++ v ++ "]"
180173access x e = parens e ++ "." ++ x
181174makeRecord kvs = record `liftM` collect kvs
@@ -305,7 +298,7 @@ clauseToJS span var (Clause name vars e) = do
305298jsNil = "_L.Nil"
306299jsCons e1 e2 = "_L.Cons(" ++ e1 ++ "," ++ e2 ++ ")"
307300jsRange e1 e2 = "_L.range" ++ parens (e1 ++ "," ++ e2)
308−jsCompare e1 e2 op = parens ("_.compare(" ++ e1 ++ "," ++ e2 ++ ").ctor" ++ op)
301+jsCompare e1 e2 op = parens ("_N.compare(" ++ e1 ++ "," ++ e2 ++ ").ctor" ++ op)
309302
310303binop (o:p) e1 e2
311304 | isAlpha o || '_' == o = (o:p) ++ parens e1 ++ parens e2
@@ -317,8 +310,8 @@ binop (o:p) e1 e2
317310 "$" -> e1 ++ parens e2
318311 "." -> jsFunc "x" . ret $ e1 ++ parens (e2 ++ parens "x")
319312 "^" -> "Math.pow(" ++ e1 ++ "," ++ e2 ++ ")"
320− "==" -> "_.eq(" ++ e1 ++ "," ++ e2 ++ ")"
321− "/=" -> "!_.eq(" ++ e1 ++ "," ++ e2 ++ ")"
313+ "==" -> "_N.eq(" ++ e1 ++ "," ++ e2 ++ ")"
314+ "/=" -> "!_N.eq(" ++ e1 ++ "," ++ e2 ++ ")"
322315 "<" -> jsCompare e1 e2 "==='LT'"
323316 ">" -> jsCompare e1 e2 "==='GT'"
324317 "<=" -> jsCompare e1 e2 "!=='GT'"