on master help sign in
Add Strings as a primitive in the compiler
commit76b2e569811322ba0202bf3863a1b01b61b89e99 authorEvan Czaplicki <info@elm-lang.org> dateWed 2 Oct 2013, 15:56 (13 years ago) parent51413f9
4 files changed+9−12
compiler/Transform/Canonicalize.hs+1−1 compiler/Type/Constrain/Literal.hs+5−5 compiler/Type/Environment.hs+1−4 compiler/Type/Unify.hs+2−2
compiler/Transform/Canonicalize.hs+1−1
@@ -89,7 +89,7 @@ metadataModule ifaces modul =
8989
9090 pair n = (n,n)
9191 localEnv = map pair (map get1 (aliases modul) ++ map get1 (datatypes modul))
92− globalEnv = map pair $ ["_List",saveEnvName,"::","[]","Int","Float","Char","Bool"] ++
92+ globalEnv = map pair $ ["_List",saveEnvName,"::","[]","Int","Float","Char","Bool","String"] ++
9393 map (\n -> "_Tuple" ++ show n) [0..9]
9494 realImports = filter (not . List.isPrefixOf "Native." . fst) (imports modul)
9595 initialEnv = Map.fromList (concatMap canon realImports ++ localEnv ++ globalEnv)
compiler/Type/Constrain/Literal.hs+5−5
@@ -10,12 +10,12 @@ constrain env span literal tipe =
1010 do tipe' <- litType
1111 return . L span $ CEqual tipe tipe'
1212 where
13− prim name = Env.get env Env.types name
13+ prim name = return (Env.get env Env.types name)
1414
1515 litType =
1616 case literal of
1717 IntNum _ -> VarN `fmap` var (Is Number)
18− FloatNum _ -> return (prim "Float")
19− Chr _ -> return (prim "Char")
20− Str _ -> return (TermN (App1 (prim "_List") (prim "Char")))
21− Boolean _ -> return (prim "Bool")
18+ FloatNum _ -> prim "Float"
19+ Chr _ -> prim "Char"
20+ Str _ -> prim "String"
21+ Boolean _ -> prim "Bool"
compiler/Type/Environment.hs+1−4
@@ -55,7 +55,7 @@ makeTypes datatypes =
5555 builtins :: [(String,Int)]
5656 builtins = concat [ map tuple [0..9]
5757 , kind 1 ["_List"]
58− , kind 0 ["Int","Float","Char","Bool"]
58+ , kind 0 ["Int","Float","Char","String","Bool"]
5959 ]
6060
6161
@@ -143,9 +143,6 @@ instantiator env sourceType = go sourceType
143143 | "appendable" `isPrefixOf` x = Is Appendable
144144 | otherwise = Flexible
145145
146− Src.Data "String" [] ->
147− return (get env types "_List" <| get env types "Char")
148−
149146 Src.Data name ts -> do
150147 ts' <- mapM go ts
151148 case (Map.lookup name (types env), Map.lookup name (aliases env)) of
compiler/Type/Unify.hs+2−2
@@ -82,10 +82,10 @@ actuallyUnify span variable1 variable2 = do
8282
8383 comparableError str = TS.addError span (str ++ msg) variable1 variable2
8484 where msg = "Expecting something comparable such as an\n" ++
85− "Int, Float, Char, or a list or tuple of comparables."
85+ "Int, Float, Char, String, or a list or tuple of comparables."
8686
8787 unifyComparable var name
88− | name `elem` ["Int","Float","Char","comparable"] = flexAndUnify var
88+ | name `elem` ["Int","Float","Char","String","comparable"] = flexAndUnify var
8989 | otherwise = comparableError ""
9090
9191 unifyComparableStructure varSuper varFlex =