Elm 0.9.0.1 → 0.9.0.2
raw patch · 10 files changed
+42/−34 lines, 10 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- Elm.cabal +1/−1
- changelog.txt +4/−0
- compiler/Transform/Canonicalize.hs +1/−1
- compiler/Type/Constrain/Expression.hs +12/−14
- compiler/Type/Solve.hs +10/−9
- compiler/Type/State.hs +2/−1
- compiler/Type/Type.hs +5/−1
- compiler/Type/Unify.hs +5/−5
- data/elm-runtime.js +2/−2
- data/interfaces.data binary
Elm.cabal view
@@ -1,5 +1,5 @@ Name: Elm-Version: 0.9.0.1+Version: 0.9.0.2 Synopsis: The Elm language module. Description: Elm aims to make client-side web-development more pleasant. It is a statically/strongly typed, functional reactive
changelog.txt view
@@ -29,6 +29,10 @@ * Allow infix op definitions without args: (*) = add * Unparenthesized if, let, case, lambda at end of binary expressions +elm-server:+ * Build multi-module projects+ * Report all errors in browser+ Libraries: * Detect hovering over any Element * Set alpha of arbitrary forms in collages
compiler/Transform/Canonicalize.hs view
@@ -134,7 +134,7 @@ Lambda pattern e -> let env' = extend env pattern in- Lambda pattern `liftM` rename env' e+ Lambda `liftM` format (renamePattern env' pattern) `ap` rename env' e App e1 e2 -> App `liftM` rnm e1 `ap` rnm e2
compiler/Type/Constrain/Expression.hs view
@@ -86,13 +86,11 @@ and . (:) ce <$> mapM branch branches Data name exprs ->- do pairs <- mapM pair exprs+ do vars <- forM exprs $ \_ -> var Flexible+ let pairs = zip exprs (map VarN vars) (ctipe, cs) <- Monad.foldM step (tipe,true) (reverse pairs)- return (cs /\ name <? ctipe)+ return $ ex vars (cs /\ name <? ctipe) where- pair e = do v <- var Flexible -- needs an ex- return (e, VarN v)- step (t,c) (e,x) = do c' <- constrain env e x return (x ==> t, c /\ c')@@ -153,9 +151,11 @@ let qs = [] -- should come from the def, but I'm not sure what would live there... (schemes, rigidQuantifiers, flexibleQuantifiers, headers, c2, c1) = info in- case (pattern, maybeTipe) of- (PVar name, Just tipe) ->- do flexiVars <- mapM (\_ -> var Flexible) qs+ do rigidVars <- mapM (\_ -> var Rigid) qs -- Some mistake may be happening here.+ -- Currently, qs is always the empty list.+ case (pattern, maybeTipe) of+ (PVar name, Just tipe) -> do+ flexiVars <- mapM (\_ -> var Flexible) qs let inserts = zipWith (\arg typ -> Map.insert arg (VarN typ)) qs flexiVars env' = env { Env.value = List.foldl' (\x f -> f x) (Env.value env) inserts } (vars, typ) <- Env.instantiateType env tipe Map.empty@@ -169,12 +169,10 @@ , flexibleQuantifiers , headers , c2- , fl rigidQuantifiers c /\ c1 )+ , fl rigidVars c /\ c1 ) - (PVar name, Nothing) ->- do v <- var Flexible- rigidVars <- mapM (\_ -> var Rigid) qs -- Some mistake may be happening here.- -- Currently, qs is always the empty list.+ (PVar name, Nothing) -> do+ v <- var Flexible let tipe = VarN v inserts = zipWith (\arg typ -> Map.insert arg (VarN typ)) qs rigidVars env' = env { Env.value = List.foldl' (\x f -> f x) (Env.value env) inserts }@@ -195,7 +193,7 @@ _ -> (PVar x, lexpr, maybeType) : map toDef vars where vars = Set.toList $ SD.boundVars pattern- x = concat vars+ x = "$" ++ concat vars var = L s . Var toDef y = (PVar y, L s $ Case (var x) [(pattern, var y)], Nothing)
compiler/Type/Solve.hs view
@@ -49,16 +49,17 @@ -- otherwise generalize let registerIfLowerRank var = do isRedundant <- liftIO $ UF.redundant var- if isRedundant then return () else do+ case isRedundant of+ True -> return ()+ False -> do desc <- liftIO $ UF.descriptor var- if rank desc < youngRank- then TS.register var >> return ()- else let flex' = if flex desc == Flexible then Rigid else flex desc- in liftIO $ UF.setDescriptor var (desc { rank = noRank, flex = flex' })-- mapM registerIfLowerRank (Map.findWithDefault [] youngRank rankDict)-- return ()+ case rank desc < youngRank of+ True -> TS.register var >> return ()+ False -> do+ let flex' = case flex desc of { Flexible -> Rigid ; other -> other }+ liftIO $ UF.setDescriptor var (desc { rank = noRank, flex = flex' })+ + mapM_ registerIfLowerRank (Map.findWithDefault [] youngRank rankDict) -- adjust the ranks of variables such that ranks never increase as you
compiler/Type/State.hs view
@@ -139,7 +139,8 @@ () | mark desc == alreadyCopied -> case copy desc of Just v -> return v- Nothing -> error "This should be impossible."+ Nothing -> error $ "Error copying type variable. This should be impossible." +++ " Please report an error to the github repo!" | rank desc /= noRank || flex desc == Constant -> return variable
compiler/Type/Type.hs view
@@ -277,7 +277,11 @@ Is Number -> (Just $ "number" ++ replicate a '\'', (vars, a+1, b, c)) Is Comparable -> (Just $ "comparable" ++ replicate b '\'', (vars, a, b+1, c)) Is Appendable -> (Just $ "appendable" ++ replicate c '\'', (vars, a, b, c+1))- _ -> (Just $ head vars, (tail vars, a, b, c))+ other -> (Just $ head vars, (tail vars, a, b, c))+ where mark = case other of+ Flexible -> ""+ Rigid -> "!"+ Constant -> "#" type CrawlState = ([String], Int, Int, Int)
compiler/Type/Unify.hs view
@@ -77,7 +77,7 @@ unify' variable1 variable2 unifyNumber svar name- | name `elem` ["Int","Float"] = flexAndUnify svar+ | name `elem` ["Int","Float","number"] = flexAndUnify svar | otherwise = TS.addError span "Expecting a number (Int or Float)" variable1 variable2 comparableError str = TS.addError span (str ++ msg) variable1 variable2@@ -85,7 +85,7 @@ "Int, Float, Char, or a list or tuple of comparables." unifyComparable var name- | name `elem` ["Int","Float","Char"] = flexAndUnify var+ | name `elem` ["Int","Float","Char","comparable"] = flexAndUnify var | otherwise = comparableError "" unifyComparableStructure varSuper varFlex =@@ -168,7 +168,7 @@ (Record1 fields1 ext1, Record1 fields2 ext2) -> do sequence . concat . Map.elems $ Map.intersectionWith (zipWith unify') fields1 fields2- let mkRecord fs ext = liftIO . structuredVar $ Record1 fs ext+ let mkRecord fs ext = fresh . Just $ Record1 fs ext case (Map.null fields1', Map.null fields2') of (True , True ) -> unify' ext1 ext2 (True , False) -> do@@ -178,8 +178,8 @@ record1' <- mkRecord fields1' ext1 unify' record1' ext2 (False, False) -> do- record1' <- mkRecord fields1' =<< liftIO (var Flexible)- record2' <- mkRecord fields2' =<< liftIO (var Flexible)+ record1' <- mkRecord fields1' =<< fresh Nothing+ record2' <- mkRecord fields2' =<< fresh Nothing unify' record1' ext2 unify' ext1 record2' where
data/elm-runtime.js view
@@ -2578,7 +2578,7 @@ case '_Tuple2': return function(){ var sum$ = ((arg1._2+n)-case19._0._0);- return {ctor:"_Tuple2", _0:{ctor:"_Tuple3", _0:A2(enqueue, n, case19._0._1), _1:arg1._1, _2:sum$}, _1:(sum$/arg1._1)};}();+ return {ctor:"_Tuple2", _0:{ctor:"_Tuple3", _0:A2(enqueue, n, case19._0._1), _1:arg1._1, _2:sum$}, _1:(sum$/Basics.toFloat(arg1._1))};}(); }break; case 'Nothing': return {ctor:"_Tuple2", _0:{ctor:"_Tuple3", _0:arg1._0, _1:arg1._1, _2:arg1._2}, _1:0};@@ -2588,7 +2588,7 @@ return function(){ switch (arg1.ctor) { case '_Tuple3':- return (_N.eq(arg1._1,k) ? A2(stepFull, n, {ctor:"_Tuple3", _0:arg1._0, _1:arg1._1, _2:arg1._2}) : (Basics.otherwise ? {ctor:"_Tuple2", _0:{ctor:"_Tuple3", _0:A2(enqueue, n, arg1._0), _1:(arg1._1+1), _2:(arg1._2+n)}, _1:((arg1._2+n)/(arg1._1+1))} : _E.If($moduleName,'between lines 82 and 83')));+ return (_N.eq(arg1._1,k) ? A2(stepFull, n, {ctor:"_Tuple3", _0:arg1._0, _1:arg1._1, _2:arg1._2}) : (Basics.otherwise ? {ctor:"_Tuple2", _0:{ctor:"_Tuple3", _0:A2(enqueue, n, arg1._0), _1:(arg1._1+1), _2:(arg1._2+n)}, _1:((arg1._2+n)/(Basics.toFloat(arg1._1)+1))} : _E.If($moduleName,'between lines 82 and 83'))); }_E.Case($moduleName,'between lines 82 and 83')}();}); return A2(hiddenState, {ctor:"_Tuple3", _0:empty, _1:0, _2:0}, step);}();}; var pure = function(f){
data/interfaces.data view
binary file changed (101033 → 100823 bytes)